Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将所有模块都记录到根记录器?_Python_Logging - Fatal编程技术网

Python 如何将所有模块都记录到根记录器?

Python 如何将所有模块都记录到根记录器?,python,logging,Python,Logging,我使用的是dictConfig(从文件加载),我希望将所有内容都默认为在根记录器上设置的处理程序。因此,如果在my.module中 logger=logging.getLogger(\uuuuu name\uuuuu) logger.debug(“debug msg”) logger.info(“info msg”) 在我的日志记录配置中,没有指定任何关于my.module的特殊信息,调试和信息应该按照我在根记录器上设置的配置进行处理。我所读到的一切都表明这应该是可行的。发件人: 子记录器将消

我使用的是
dictConfig
(从文件加载),我希望将所有内容都默认为在根记录器上设置的处理程序。因此,如果在
my.module

logger=logging.getLogger(\uuuuu name\uuuuu)
logger.debug(“debug msg”)
logger.info(“info msg”)
在我的日志记录配置中,没有指定任何关于
my.module
的特殊信息,调试和信息应该按照我在根记录器上设置的配置进行处理。我所读到的一切都表明这应该是可行的。发件人:

子记录器将消息传播到与其祖先记录器关联的处理程序。因此,不需要为应用程序使用的所有记录器定义和配置处理程序。为顶级记录器配置处理程序并根据需要创建子记录器就足够了。(但是,可以通过将记录器的“传播”属性设置为False来关闭传播。)

然而,我发现除非我的
dictConfig
明确列出每个记录器,否则这是行不通的。如果我不这样做,我的配置似乎都不会生效。(您可以比较我的演示项目的分支。)

我从带有

以open(“resources/logging.yaml”)作为f:
loggingConfig=yaml.安全荷载(f)
logging.config.dictConfig(loggingConfig)
我真的不明白在这两种情况下有什么不同——我观察了级别、有效级别、父级、处理程序等,它们在这两种情况下似乎是相同的。我正在设置
propagate=True
,但事实上,如果没有该代码段,记录器仍然具有
propagate=True
。我也可以使用一个解决方案,只需在我创建的每个记录器上设置一些神奇的属性,例如

logger=logging.getLogger(\uuuuu name\uuuuu)
logger.setMagicalPropertyHere()

(顺便说一句,我是带着log4j的心态来的,这可以解释我的困惑)

也许这只是时间问题?是否在初始化主记录器之前创建了子记录器?@MarkRansom-hmm,我正在定义记录器之后加载配置。我想应该是这样的,因为我只在我的
\uuuu main\uuuu
部分中加载配置,它需要在末尾。也许这意味着我需要将那些
\uuuuu main\uuuu
部分从带有“常规”代码的文件中移出?事实上,就是这样!你应该发布一个答案,这样我就可以接受了。您可以引用以下内容:。(如果可以,我甚至会为您编辑答案)