我正在编写一段代码,用自己的处理程序和格式实例化自己的记录器。
现在我已经添加了一个直接使用日志记录模块的库的使用,它会搞砸我的记录器 - 原始记录器开始以不同的格式打印每行两次,而默认记录器根本不打印任何内容。
有什么建议吗? MCVE:
import sys
import logging
log = logging.getLogger('foo')
log.addHandler(logging.StreamHandler(sys.stdout))
log.setLevel(logging.DEBUG)
log.info("works once")
logging.info("Isn't printed")
log.info("printed twice with different format")
输出:
works once
printed twice with different format
INFO:foo:printed twice with different format
它似乎也不像默认记录器以某种方式为我的记录器实例添加额外的处理程序:
> print log.handlers
[<logging.StreamHandler object at 0x7f5d14314990>]
我无法更改我已包含的模块......
答案 0 :(得分:0)
在挖掘和挖掘之后,我终于找到了一些拯救我的文档!
Logger.propagate
如果此计算结果为true,则记录到此事件 记录器将被传递给更高级别的处理程序(祖先) 记录器,以及连接到此记录器的任何处理程序。消息 直接传递给祖先记录器的处理程序 - 两者都没有 有问题的祖先记录器的等级和过滤器被认为是。
如果此计算结果为false,则不会将记录消息传递给 祖先记录器的处理程序。
构造函数将此属性设置为True。
设置log.propagate = False
结束了我的不幸。
通过logging.info
首次使用默认记录器似乎已经初始化了默认记录器,从那时起传播开始产生影响。