Tensorflow 导致日志消息加倍

Tensorflow causes logging messages to double

所以我在玩他们昨天发布的 Google 的 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 版本都会出现错误。

我得到这个输出:

test
WARNING:TEST:test

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

logger.propagate = False

另见 duplicate output in simple python logging configuration

跟进:这是 tensorflow 使用日志包的方式的意外副作用。我已经在 HEAD 处对其进行了更改,以将其内部记录器的范围限定在名称 "tensorflow" 下,以避免这种污染。应该在一天左右的时间内出现在 github 头部。在此期间,logger.propagate 解决方案将起作用,并且一旦修复完成就不会中断,因此您应该可以放心使用了。再次感谢您发现这一点!

跟进-跟进: 以 TensorFlow 1.14 开头直接公开 logger

import tensorflow as tf

logger = tf.get_logger()

logger.propagate = False 解决了我的问题。我认为这是 tensorflow

的一个错误