如何在使用dictConfig时设置Python日志记录,使其覆盖日志文件?

5
我正在使用 dictConfig() 配置我的日志。我希望每次运行进程时,进程都会覆盖指定的日志文件。我该怎么做?
我在 basicConfig() 中看到了 filemode 作为一个设置,但是我无法确定在 dictConfig() 配置中应该放在哪里。
我尝试过这个方法,但是出现了 unexpected keyword argument 'filemode' 的错误。我也在其他地方尝试过。Python 日志文档真是让人困惑!
LOG_PATH                    = os.path.join(PROJECT_PATH,'logs')
LOG_FILE_NAME               = 'log.'+main.__file__+'.'+time.strftime("%Y-%m-%d")
LOG_FILE_PATH               = os.path.join(LOG_PATH,LOG_FILE_NAME)
LOGGING_CONFIG = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': { 
        'standard': { 
            'format': '[%(levelname)s] %(message)s - [pid:%(process)d - %(asctime)s - %(name)s]',
        },
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'formatter': 'standard',
            'class': 'logging.StreamHandler',
        },
        'file': {
            'level': 'INFO',
            'formatter': 'standard',
            'class': 'logging.FileHandler',
            'filename': LOG_FILE_PATH,
            'filemode': 'w',
        },
    },
    'loggers': {
        '': { 
            'handlers': ['console','file'],
            'level': 'DEBUG',
            'propagate': True
        },
    },
}
logging.config.dictConfig(os.path.join(LOGGING_CONFIG))
logger = logging.getLogger(__name__)
logger.debug('logger configured')

回答


感谢 @Vinay Sajip 提供的下面被选中的答案。这是我的更新配置,现在每次运行进程时都会覆盖指定的日志文件。我只需添加 LOGGING_CONFIG['handlers']['file']['mode'] = 'w'

LOG_PATH                    = os.path.join(PROJECT_PATH,'logs')
LOG_FILE_NAME               = 'log.'+main.__file__+'.'+time.strftime("%Y-%m-%d")
LOG_FILE_PATH               = os.path.join(LOG_PATH,LOG_FILE_NAME)
LOGGING_CONFIG = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': { 
        'standard': { 
            'format': '[%(levelname)s] %(message)s - [pid:%(process)d - %(asctime)s - %(name)s]',
        },
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'formatter': 'standard',
            'class': 'logging.StreamHandler',
        },
        'file': {
            'level': 'INFO',
            'formatter': 'standard',
            'class': 'logging.FileHandler',
            'filename': LOG_FILE_PATH,
            'mode': 'w', # <=== HERE IS THE CHANGE
        },
    },
    'loggers': {
        '': { 
            'handlers': ['console','file'],
            'level': 'DEBUG',
            'propagate': True
        },
    },
}
logging.config.dictConfig(os.path.join(LOGGING_CONFIG))
logger = logging.getLogger(__name__)
logger.debug('logger configured')
1个回答

5

您需要使用mode而不是filemode。一般来说,您需要使用文档中指定的处理程序初始化的参数名称 - 请参见此处FileHandler


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接