当我在配置文件中配置根记录器时。其他子记录器没有遵循相同的配置。
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>]
但是我没有其他文件的日志。 我认为如果孩子没有任何处理程序,他会将日志发送给他的父母。知道为什么我看不到日志吗?或如何解决?
答案 0 :(得分:1)
这里发生的是,在调用test.py
中的logging.config.fileConfig("logger.ini")
之前,已创建在main.py
中提取的记录器。调用fileConfig
后,将删除配置文件中未指定的所有现有记录器。
有两种建议可以解决此问题:
请勿在模块的全局范围内调用logging.getLogger
,仅在需要在函数/方法内部使用记录器时才调用
更改代码,以便在调用fileConfig()
时指定:logging.config.fileConfig("logger.ini", disable_existing_loggers=False)
。这将导致维护并且不禁用在应用配置之前创建的所有记录器。
有关选项#2的详细信息,请参见https://docs.python.org/2/library/logging.config.html#logging.config.fileConfig。