【发布时间】:2017-08-18 00:31:25
【问题描述】:
我正在使用dictConfig() 来配置我的日志记录。我希望进程在每次运行时覆盖指定的日志文件。我该怎么做?
我将filemode 视为basicConfig() 中的一个设置,但我不知道将其放在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')
【问题讨论】: