gpt4 book ai didi

python - 全局更改记录器模块中的日志文件名

转载 作者:太空宇宙 更新时间:2023-11-04 10:24:12 25 4
gpt4 key购买 nike

我将记录器模块与 dictConfig(带有 yaml 文件)一起用于我的应用程序日志记录。但是,我想通过添加日期前缀来全局更改日志文件名(例如:日志路径:/foo/bar/file_20150523.log)。

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

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

谢谢

最佳答案

这个想法很简单:

  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 是 Action 所在的地方。我首先从 YAML 文件加载配置字典,然后修补文件名
  • 为了修补文件名,我将基本文件名和扩展名分开
  • 然后我获取今天的日期并将时间戳附加到文件名,然后将结果分配回配置字典
  • 最后,我调用了 dictConfig 来完成这项工作

关于python - 全局更改记录器模块中的日志文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30416996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com