繁体   English   中英

Python日志记录-具有root记录器的多个模块中的配置文件

[英]Python logging - config file in multiple modules with root logger

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

main.py

import logging
import logging.config
import test


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

test.py

import logging

logger = logging.getLogger(__name__)

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

logger.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>]

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

这里发生的是,在记录器获取test.py在打电话之前创建logging.config.fileConfig("logger.ini")main.py 调用fileConfig ,将删除未在配置文件中指定的所有现有记录器。

我可以通过两种方法建议解决此问题:

  1. 不要在模块的全局范围内调用logging.getLogger ,仅在需要在函数/方法内部使用logger时才调用

  2. 更改代码,以便在调用fileConfig()时指定: logging.config.fileConfig("logger.ini", disable_existing_loggers=False) 这将导致维护并且不禁用在应用配置之前创建的所有记录器。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM