5xu*_*xum 16 python logging tensorflow
所以我正在玩他们昨天发布的Google的Tensorflow库,遇到了一个令我讨厌的烦人的bug.
我所做的是像往常一样设置python日志记录功能,结果是,如果我导入tensorflow库,控制台中的所有消息都开始加倍.有趣的是,如果您只使用该功能,则不会发生这种情况logging.warn/info/..().
不会使消息加倍的代码示例:
import tensorflow as tf
import logging
logging.warn('test')
Run Code Online (Sandbox Code Playgroud)
的一个代码示例做双所有消息:
import tensorflow as tf
import logging
logger = logging.getLogger('TEST')
ch = logging.StreamHandler()
logger.addHandler(ch)
logger.warn('test')
Run Code Online (Sandbox Code Playgroud)
现在,我是个简单的人.我喜欢它的功能logging,所以我使用它.使用logger对象和添加a的设置StreamHandler是我看到的其他人如何做到这一点的东西,但看起来它符合这个东西的意图.但是,我没有对日志库的深入了解,因为它总是有点工作.
因此,解释为什么消息加倍的任何帮助都将是最有帮助的.
我使用Ubuntu 14.04.3 LTS与Python 2.7.6,但错误发生在我尝试的所有Python 2.7版本中.
dga*_*dga 18
我得到这个输出:
test
WARNING:TEST:test
Run Code Online (Sandbox Code Playgroud)
Tensorflow 也使用日志记录框架并设置了自己的处理程序,因此在您记录时,默认情况下,它会传播到tensorflow内部的父日志记录处理程序.您可以通过设置更改此行为:
logger.propagate = False
Run Code Online (Sandbox Code Playgroud)
后续:这是tensorflow使用日志包的方式的意外副作用.我在HEAD更改了它的内部记录器,名称为"tensorflow",以避免这种污染.应该在一天左右的github头.与此同时,logger.propagate解决方案将起作用,并且一旦修复程序进入就不会中断,因此您应该安全.再次感谢您发现这个!