TensorFlow 1.8中的自定义日志记录处理程序

时间:2018-05-18 15:25:39

标签: tensorflow

对于以前版本的TensorFlow,我们一直在覆盖tf.logging._logger的处理程序,以获取我们的python代码库中其余部分使用的自定义日志记录行为:

  • 标准化日志格式
  • 将级别INFO登录到stdout并将DEBUG登录到文件
  • 在GCP上,使用易于搜索的字符串
  • 登录到Stackdriver

例如,在TF 1.7上,以下代码段(省略了一些日志记录样板)

    import tensorflow as tf
    tf.logging.set_verbosity(tf.logging.INFO)
    tf_logging = tf.logging._logger
    tf_logging.handlers = [_std_out_handler()]
    tf_logging.propagate = False
    _logging.info("EXPECTED LOG FORMAT")
    tf.logging.info("TF LOG FORMAT")

生成

[INFO |mrtx] 2018-05-18 15:10:07,613                                            /merantix_core/common/util/logging.py:189  --- EXPECTED LOG FORMAT
[INFO |mrtx] 2018-05-18 15:10:07,614  /usr/local/lib/python2.7/dist-packages/tensorflow/python/platform/tf_logging.py:116  --- TF LOG FORMAT

在TF 1.8中,tf.logging._logger不再可访问。根据此thread,我尝试设置

   tf_logging = _logging.getLogger('tensorflow')

在上面的代码段中,但输出是

[INFO |mrtx] 2018-05-18 15:20:34,043                                            /merantix_core/common/util/logging.py:190  --- EXPECTED LOG FORMAT
INFO:tensorflow:TF LOG FORMAT

我看不到TF 1.7和1.8之间tf_logging.py的任何变化。我假设之前没有强制执行tf_export调用,但现在正在执行。还有一些方法可以覆盖tf.logging的处理程序吗?或者,是否有更规范的方式来获得上述功能?

2 个答案:

答案 0 :(得分:6)

您仍然可以通过直接导入日志记录模块来访问tensorflow记录器:

from tensorflow.python.platform import tf_logging
tf_logger = tf_logging._get_logger()
tf_logger.handlers = handlers

答案 1 :(得分:0)

以下代码已在tensorflow 1.12.0上进行了良好的测试。

import tensorflow as tf
import logging

logger = logging.getLogger('tensorflow')
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
for h in logger.handlers:
    h.setFormatter(formatter)
tf.logging.set_verbosity(tf.logging.INFO)
tf.logging.info("testing")
tf.logging.debug("debug mesg")
tf.logging.warning("a warning mesg")

当我们导入tensorflow时,总是有一个记录器名称'tensorflow'。我们需要调用它并更改其格式。

Logger.handlers仅包含一个处理程序。

tf.logging._get_logger()在tf 1.12.0中不起作用。

我们可以修改上面的代码以向tensorflow记录器添加处理程序(steam,文件,电子邮件等)。