Restart logging to a new file (Python) Restart logging to a new file (Python) python python

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)