【问题标题】:Change log file name in logger module globally全局更改记录器模块中的日志文件名
【发布时间】:2015-05-23 19:57:18
【问题描述】:

我正在使用带有 dictConfig(带有 yaml 文件)的 logger 模块来进行应用程序日志记录。但是,我会通过添加日期前缀来全局更改日志文件名(例如:logpath:/foo/bar/file_20150523.log)。

所以每次我启动我的应用程序时都会创建一个新的日志文件。

是否可以在 yaml 文件中以另一种方式执行此操作,或者我需要在我的应用程序中修改处理程序?

感谢

【问题讨论】:

  • 加载yaml文件后,将当前日期附加到文件名,然后调用dictConfig。我之前没用过dictConfig,所以我需要一些时间来学习才能提供详细的答案。

标签: python logging


【解决方案1】:

想法很简单:

  1. 从 YAML 文件中读取配置
  2. 找到日志文件的名称
  3. 将日期戳附加到名称部分(不是扩展部分)
  4. 调用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 完成了这项工作

【讨论】:

    猜你喜欢
    • 2011-11-29
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    相关资源
    最近更新 更多