gpt4 book ai didi

Python 日志记录 - 使用根记录器在多个模块中配置文件

转载 作者:行者123 更新时间:2023-11-30 22:11:11 25 4
gpt4 key购买 nike

当我在配置文件中配置根记录器时。其他子记录器不遵循相同的配置。

main.py

import logging
import logging.config
import test


logging.config.fileConfig("logger.ini")
logger = logging.root
logger.critical("main")
test.f()

测试.py

import logging

logger = logging.getLogger(__name__)

def f():
print "inside f"
logger.critical("Test")
print logger.parent.name
print logger.parent.handlers

记录器.ini

[loggers]
keys=root

[handlers]
keys=console
[formatters]
keys=form
[logger_root]
level=DEBUG
handlers=console

[handler_console]
class=StreamHandler
formatter=form
args=()

[formatter_form]
format=%(levelname)s:%(name)s:%(message)s

当我运行我没有的程序时,我得到了

CRITICAL:root:main
inside f
root
[<logging.StreamHandler object at 0x00000000021C4908>]

但是我没有其他文件的日志。我认为如果 child 没有任何处理程序,他会将日志发送给他的 parent 。知道为什么我看不到日志吗?或者如何解决?

最佳答案

这里发生的情况是,在 test.py 中获取的记录器是在您在 中调用 logging.config.fileConfig("logger.ini") 之前创建的main.py。调用 fileConfig 后,配置文件中未指定的任何预先存在的记录器都将被删除。

我建议有两种方法来解决这个问题:

  1. 不要在模块的全局范围内调用 logging.getLogger,但仅当您需要在函数/方法内使用记录器时

  2. 更改您的代码,以便在调用 fileConfig() 时指定:logging.config.fileConfig("logger.ini",disable_existing_loggers=False)。这会导致在应用配置之前创建的任何记录器得到维护而不是禁用。

参见https://docs.python.org/2/library/logging.config.html#logging.config.fileConfig有关选项 #2 的详细信息。

关于Python 日志记录 - 使用根记录器在多个模块中配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51506216/

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