Restart logging to a new file (Python)
You can manually re-assign the handler if you want using the removeHandler
and addHandler
OR, you can access logger.handlers[index_of_handler_here].stream
and replace the stream manually, but I'd recommend the former over the latter.
logger.handlers[0].stream.close()logger.removeHandler(logger.handlers[0])file_handler = logging.FileHandler(filename)file_handler.setLevel(logging.DEBUG)formatter = logging.Formatter("%(asctime)s %(filename)s, %(lineno)d, %(funcName)s: %(message)s")file_handler.setFormatter(formatter)logger.addHandler(file_handler)
Here is what I do:
def initLogging(filename): global logger if logger == None: logger = logging.getLogger() else: # wish there was a logger.close() for handler in logger.handlers[:]: # make a copy of the list logger.removeHandler(handler) logger.setLevel(logging.DEBUG) formatter = logging.Formatter(fmt='%(asctime)s: %(message)s', datefmt='%I:%M:%S') fh = logging.FileHandler(filename) fh.setFormatter(formatter) logger.addHandler(fh) sh = logging.StreamHandler(sys.stdout) sh.setFormatter(formatter) logger.addHandler(sh)