How to use logging with python's fileConfig and configure the logfile filename

39,860

Solution 1

Change your handler_fileHandler section like so:

[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=fileFormatter
args=('%(logfilename)s',)

and then add a defaults argument to the fileConfig call

logging.config.fileConfig(loginipath, defaults={'logfilename': '/var/log/mylog.log'})

Solution 2

Both handlers worked for me:

(1)

logging.config.fileConfig( 'logging.ini' , disable_existing_loggers=False)


[handler_myhandler1]
class=FileHandler
level=DEBUG
formatter=form01
args=('python.log', 'w')

(2)

logging.config.fileConfig( 'logging.ini' , disable_existing_loggers=False, defaults={ 'logfilename' : getSomeName() } )

[handler_myhandler2]
class=FileHandler
level=DEBUG
formatter=form01
args=('%(logfilename)s','w')

after reading examples at https://docs.python.org/2/library/logging.config.html

Share:
39,860
Admin
Author by

Admin

Updated on July 09, 2022

Comments

  • Admin
    Admin almost 2 years

    I have a logging configuration file for logging to console and a file with different formats and levels. In my python script I can load this configuration and basically console and file output are ok.

    I set the file name in the config file as shown below.

    Is it possible to set that file name in the python script itself?

    python code:

    # set up logging
    logging.config.fileConfig(loginipath)
    logger = logging.getLogger('sLogger')
    
    # log something
    logger.debug('debug message')
    logger.info('info message')
    logger.warn('warn message')
    logger.error('error message')
    logger.critical('critical message')
    

    logging config file:

    [loggers]
    keys=root,sLogger
    
    [handlers]
    keys=consoleHandler,fileHandler
    
    [formatters]
    keys=fileFormatter,consoleFormatter
    
    [logger_root]
    level=DEBUG
    handlers=consoleHandler
    
    [logger_sLogger]
    level=DEBUG
    handlers=consoleHandler,fileHandler
    qualname=sLogger
    propagate=0
    
    [handler_consoleHandler]
    class=StreamHandler
    level=WARNING
    formatter=consoleFormatter
    args=(sys.stdout,)
    
    [handler_fileHandler]
    class=FileHandler
    level=DEBUG
    formatter=fileFormatter
    args=('logfile.log',)
    
    [formatter_fileFormatter]
    format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
    datefmt=
    
    [formatter_consoleFormatter]
    format=%(levelname)s - %(message)s
    datefmt=