我正在使用带有dictConfig的记录器模块(带有yaml文件)进行应用程序日志记录。但是,我想通过添加日期前缀来全局更改日志文件名(例如:logpath:/foo/bar/file_20150523.log)。
因此,每次启动应用程序时都会创建一个新的日志文件。
是否有可能以另一种方式在yaml文件中执行此操作,或者我需要在应用程序中修改处理程序?
感谢名单
答案 0 :(得分:3)
这个想法很简单:
logging.config.dictConfig
并传入修改后的配置字典以下是我用于此示例的YAML文件, daily_log_file.yaml :
version: 1
loggers:
default_logger:
handlers: [consoleHandler, fileHandler]
level: DEBUG
handlers:
consoleHandler:
class: logging.StreamHandler
level: DEBUG
formatter: brief
fileHandler:
class: logging.FileHandler
formatter: brief
filename: '/tmp/daily_log_file.log'
level: DEBUG
formatters:
brief:
format: '%(levelname)8s %(message)s'
以下是脚本 daily_log_file.py :
import datetime
import os
import logging
import logging.config
import yaml
def yaml_config(yaml_filename):
global config_dict
with open(yaml_filename) as f:
config_dict = yaml.load(f)
# Append the date stamp to the file name
log_filename = config_dict['handlers']['fileHandler']['filename']
base, extension = os.path.splitext(log_filename)
today = datetime.datetime.today()
log_filename = '{}{}{}'.format(
base,
today.strftime('_%Y%m%d'),
extension)
config_dict['handlers']['fileHandler']['filename'] = log_filename
# Apply the configuration
logging.config.dictConfig(config_dict)
if __name__ == '__main__':
yaml_config('daily_log_file.yaml')
logger = logging.getLogger('default_logger')
logger.debug('debug message')
logger.info('info message')
yaml_config
是行动的地方。我首先从YAML文件加载配置字典,然后修补文件名dictConfig
完成工作