小编典典

Tensorflow导致记录消息加倍

python

因此,我在玩昨天他们发布的Google的Tensorflow库,遇到了一个烦人的bug,一直困扰着我。

我所做的就是像往常一样设置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对象以及添加aStreamHandler来完成此设置,但看起来与该对象的使用方式相适应。但是,我对日志记录库没有深入的了解,因为它总是可以工作的。

因此,任何有助于解释为什么消息加倍的帮助将是最有帮助的。

我正在将Ubuntu 14.04.3 LTS与Python 2.7.6结合使用,但是该错误在我尝试过的所有Python 2.7版本中均发生。


阅读 226

收藏
2020-12-20

共1个答案

小编典典

我得到以下输出:

test
WARNING:TEST:test

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

logger.propagate = False

另请参见简单的python日志记录配置中的重复输出

后续:这是tensorflow使用日志记录包的方式的意外副作用。为了避免这种污染,我在HEAD处对其进行了更改,以使其内部记录器的名称为“
tensorflow”。应该在一天左右的时间内放在github头上。同时,logger.propagate解决方案将起作用,并且在修复该问题后也不会中断,因此您应该放心。再次感谢您发现这个问题!

后续跟进:从TensorFlow
1.14
开始logger直接暴露以下内容:

import tensorflow as tf

logger = tf.get_logger()
2020-12-20