Tensorflow导致日志消息加倍

时间:2015-11-12 00:51:26

标签: python logging tensorflow

所以我正在玩他们昨天发布的谷歌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版本中。

1 个答案:

答案 0 :(得分:14)

我得到了这个输出:

test
WARNING:TEST:test

Tensorflow 使用日志记录框架并设置了自己的处理程序,因此默认情况下,当您记录时,它会传播到tensorflow内的父日志记录处理程序。您可以通过设置:

来更改此行为
logger.propagate = False

另见duplicate output in simple python logging configuration

跟进:这是tensorflow使用日志包的方式的意外副作用。我在HEAD更改了它的内部记录器,名称为“tensorflow”,以避免这种污染。应该在一天左右的github头。与此同时,logger.propagate解决方案将起作用,并且一旦修复程序进入就不会中断,因此您应该安全。再次感谢您发现此消息!