我想我已经尝试过任何一种组合,我在伐木方面一直在碰壁。我一直在试着去了解一下伐木食谱和各种提到同一问题的帖子,但我还是不明白。我的代码相当简单:
主模块(main.py
):
#my modules
import manager
import metadata
import logging
import logging.config
if config_file:
logging.config.fileConfig(config_file)
else:
logging.basicConfig(level=logging.INFO)
然后在导入到main.py
模块中的两个模块(manager.py
和metadata.py
)中:
最后,logger配置文件:
[loggers]
keys=root, manager, metadata
[logger_root]
level=NOTSET
handlers=console
qualname=root
[logger_manager]
level=DEBUG
handlers=console
qualname=manager
[logger_metadata]
level=DEBUG
handlers=console
qualname=metadata
如果我现在运行主.py,我将只记录root
。在
另一方面,如果我更改代码如下:
在经理.py公司名称:
import logging
logger = logging.getLogger('manager')
logger.addHandler(logging.NullHandler())
在元数据.py公司名称:
import logging
logger = logging.getLogger('metadata')
logger.addHandler(logging.NullHandler())
我将获得manager
和metadata
的重复日志记录。在
如有任何提示,将不胜感激。在
对于问题的第一部分,请检查name变量的实际值。由于它取决于文件位置和导入方法,它可能不是您所期望的:
第二部分:
来自Logging HOWTO:
子记录器将消息传播到与其祖先记录器关联的处理程序。因此,没有必要为应用程序使用的所有记录器定义和配置处理程序。为顶级记录器配置处理程序并根据需要创建子记录器就足够了。(但是,可以通过将记录器的propagate属性设置为False来关闭传播。)
所以你的配置应该是:
^{pr2}$或类似的:
在这里找到了答案:Python日志:different behavior between using fileconfig and programmatic config。在
基本上,我必须将
disable_existing_loggers=False
添加到logging.config.fileConfig
调用中。因此,对我有用的代码是:这还允许我将日志记录配置简化为仅根日志记录器:
^{pr2}$相关问题 更多 >
编程相关推荐