所以我正在玩他们昨天发布的谷歌Tensorflow图书馆,并遇到了一个令我讨厌的臭虫。
我所做的是像往常一样设置python日志记录功能,结果是,如果我导入tensorflow库,控制台中的所有消息都开始加倍。有趣的是,如果您只使用logging.warn/info/..()
函数,则不会发生。
不使邮件加倍的代码示例:
import tensorflow as tf
import logging
logging.warn('test')
将所有消息加倍的代码示例:
import tensorflow as tf
import logging
logger = logging.getLogger('TEST')
ch = logging.StreamHandler()
logger.addHandler(ch)
logger.warn('test')
现在,我是个简单的男人。我喜欢logging
的功能,所以我使用它。使用logger
对象进行设置并添加StreamHandler
是我选择了其他人如何做到这一点,但看起来它符合该事物的用途。但是,我对日志库没有深入的了解,因为它总是很有效。
因此,解释为什么消息加倍的任何帮助都将是最有帮助的。
我正在使用Ubuntu 14.04.3 LTS和Python 2.7.6,但错误发生在我尝试过的所有Python 2.7版本中。
答案 0 :(得分:14)
我得到了这个输出:
test
WARNING:TEST:test
Tensorflow 也使用日志记录框架并设置了自己的处理程序,因此默认情况下,当您记录时,它会传播到tensorflow内的父日志记录处理程序。您可以通过设置:
来更改此行为logger.propagate = False
另见duplicate output in simple python logging configuration
跟进:这是tensorflow使用日志包的方式的意外副作用。我在HEAD更改了它的内部记录器,名称为“tensorflow”,以避免这种污染。应该在一天左右的github头。与此同时,logger.propagate解决方案将起作用,并且一旦修复程序进入就不会中断,因此您应该安全。再次感谢您发现此消息!