我正在将记录器模块与 dictConfig (带有 yaml 文件)一起用于我的应用程序日志记录。但是,我想通过添加日期前缀来全局更改日志文件名(例如:logpath:/foo/bar/file_20150523.log)。
因此,每次启动应用程序时,都会创建一个新的日志文件。
是否可以通过另一种方式在 yaml 文件中执行此操作,或者我需要修改应用程序中的处理程序?
谢谢
这个想法很简单:
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'
Run Code Online (Sandbox Code Playgroud)
这是脚本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')
Run Code Online (Sandbox Code Playgroud)
yaml_config是行动所在。我首先从 YAML 文件加载配置字典,然后修补文件名dictConfig来完成工作