I'm trying to log info from multiple modules that I've created. I have a main script (main.py
) and another module (let's call it mymodule.py
). I've set up a logger in each module as follows:
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
# create a file handler
file_handler = logging.FileHandler('debug.log', mode='a')
file_handler.setLevel(logging.DEBUG)
# create a logging format
# we're limiting the levelname to 1 char: I=INFO, D=DEBUG and so on
formatter = logging.Formatter('[%(levelname).1s][%(module)14s:%(funcName)-15s]-> %(message)s')
file_handler.setFormatter(formatter)
# add the handler to the logger
logger.addHandler(file_handler)
In main.py I load mymodule.py
and I do the following at the end of all processing.
file_handler.close()
logger.removeHandler(file_handler)
Now the problem is that once the script stops running I can't delete debug.log unless I close Spyder. Also, for each subsequent run I get duplicate entries from mymodule.py
like this.
[D][mymodule:__init__ ]-> object created
[D][mymodule:__init__ ]-> object created
So it appears that there is an open file handler that I've left hanging. How do I close it. If I have to add a file_handler.close()
in mymodule.py
where do I add it?
EDIT: I tried this in main.py
# clean up file handlers
handlers = logger.handlers[:]
for handler in handlers:
handler.close()
logger.removeHandler(handler)