pythonpython-3.xlogginglogfilepython-logging

Logging to two files with different settings


I am already using a basic logging config where all messages across all modules are stored in a single file. However, I need a more complex solution now:

I have been reading the docs for the module, bu they are very complex for me at the moment. Loggers, handlers...

So, in short:

How to log to two files in Python 3, ie:

import logging
# ...
logging.file1.info('Write this to file 1')
logging.file2.info('Write this to file 2')

Solution

  • You can do something like this:

    import logging
    formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
    
    
    def setup_logger(name, log_file, level=logging.INFO):
        """To setup as many loggers as you want"""
    
        handler = logging.FileHandler(log_file)        
        handler.setFormatter(formatter)
    
        logger = logging.getLogger(name)
        logger.setLevel(level)
        logger.addHandler(handler)
    
        return logger
    
    # first file logger
    logger = setup_logger('first_logger', 'first_logfile.log')
    logger.info('This is just info message')
    
    # second file logger
    super_logger = setup_logger('second_logger', 'second_logfile.log')
    super_logger.error('This is an error message')
    
    def another_method():
       # using logger defined above also works here
       logger.info('Inside method')