[英]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
,将删除未在配置文件中指定的所有现有记录器。
我可以通过两种方法建议解决此问题:
不要在模块的全局范围内调用logging.getLogger
,仅在需要在函数/方法内部使用logger时才调用
更改代码,以便在调用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.