gpt4 book ai didi

python - 配置文件中的 FileHandler 记录罕见行为

转载 作者:太空宇宙 更新时间:2023-11-03 21:23:41 25 4
gpt4 key购买 nike

我有一个日志配置文件:

logger_config.yml

version: 1
formatters:
simple:
format: '%(asctime)s - %(levelname)s - %(message)s'
handlers:
console:
class: logging.StreamHandler
level: DEBUG
formatter: simple
stream: ext://sys.stdout
file:
class: logging.FileHandler
level: DEBUG
formatter: simple
filename: train.log
loggers:
trainLogger:
level: DEBUG
handlers: [console]
propagate: 1
root:
level: DEBUG
handlers: [console]
propagate: 1

还有一个简单的脚本:

测试.py

import logging
import logging.config
import yaml


with open('logging_config.yml', 'rt') as f:
config = yaml.safe_load(f.read())

logging.config.dictConfig(config)

# create logger
logger = logging.getLogger(__name__)

# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')

当我运行 test.py 时,假设脚本只会登录控制台,因为 roothandlerconsole 但也会创建一个空的 train.log。为什么要添加这个?

最佳答案

在加载记录器实例时,您正在创建一个 fileHandler,即使您仅使用 consoleHandler。如果您只是在 shell 中运行以下命令:

import logging
fh = logging.FileHandler("mylogger.txt")
quit()

您将看到“mylogger.txt”已创建。这是因为处理程序在幕后创建文件是在 __init__ 上创建的,而不是在使用时创建的。最好以这种方式进行设计,因为您可能会多次(可能同时)使用该处理程序,并且您不想每次都检查文件是否存在,因为那样会很慢并且您可以在尝试创建文件时引入竞争条件

关于python - 配置文件中的 FileHandler 记录罕见行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54013492/

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