python does not release filehandles to logfile
You can also shutdown the logging completely. In that case, file handles are being released:
logging.shutdown()
It closes opened handles of all configured logging handlers.
I needed it to be able to delete a log file after a unit test is finished and I was able to delete it right after the call to the logging.shutdown()
method.
You need to call .close()
on the filehandler.
When your Run
class completes, call:
handlers = self.log.handlers[:]
for handler in handlers:
self.log.removeHandler(handler)
handler.close()
A file handler will automatically re-open the configured filename every time a new log message arrives, so calling handler.close()
may sometimes appear futile. Removing the handler from the logger stops future log records from being sent to it; in the above code we do this first, to avoid an untimely log message from another thread reopening the handler.
Another answer here suggest you use logging.shutdown()
. However, all that logging.shutdown()
does is call handler.flush()
and handler.close()
, and I'd not recommend using it. It leaves the logging module in a state where you can't use logging.shutdown()
again, not reliably.