如何将TensorFlow日志记录重定向到文件?

时间:2016-11-12 04:45:30

标签: logging tensorflow

我正在使用TensorFlow-Slim,它有一些有用的日志记录打印到tf.logging的控制台。我想将这些记录重定向到文本文件,但无法找到方法。我查看了tf_logging.py源代码,该代码公开了以下内容,但似乎没有将日志写入文件的选项。如果我错过了什么,请告诉我。

__all__ = ['log', 'debug', 'error', 'fatal', 'info', 'warn', 'warning',
           'DEBUG', 'ERROR', 'FATAL', 'INFO', 'WARN',
           'flush', 'log_every_n', 'log_first_n', 'vlog',
           'TaskLevelStatusMessage', 'get_verbosity', 'set_verbosity']

4 个答案:

答案 0 :(得分:24)

import logging

# get TF logger
log = logging.getLogger('tensorflow')
log.setLevel(logging.DEBUG)

# create formatter and add it to the handlers
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# create file handler which logs even debug messages
fh = logging.FileHandler('tensorflow.log')
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
log.addHandler(fh)

我的解决方案受到this thread的启发。

答案 1 :(得分:4)

你是对的,没有任何动向你这样做。

如果你真的,肯定,绝对不能忍受,tf.logging基于python日志记录。所以, import logging tf.logging._logger.basicConfig(filename='tensorflow.log', level=logging.DEBUG)

请注意,您自行处于不受支持的路径上,并且该行为可能随时中断。

您也可以在我们的github issue页面上提交功能请求。

答案 2 :(得分:1)

一个简单的解决方法是将输出从命令行定向到文件。例如,

python training.py 1> output.log 2> error.log
# 1 for stdout stream and 2 for stderr stream

根据已接受的答案,这样做的好处是您可以获得所有日志。原因是并非所有日志记录都来自python(请记住,运行时是在C ++中实现的)。例如,通过设置环境变量,您可以获得非常有用的调试日志记录(包括有关Tensor内存分配的信息)。

import os
os.environ['TF_CPP_MIN_VLOG_LEVEL'] = '3'

(使用注意进行此操作。日志量惊人。)

要了解如何在C ++中实现日志记录,

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/platform/default/logging.h https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/platform/default/logging.cc

特别是,似乎在此行中将日志记录消息写入stderr:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/platform/default/logging.cc#L73

我在讨论here

中引用了该内容

答案 3 :(得分:0)

如果您在项目中使用python日志记录,其中一个选项是在日志配置文件中定义名称为“tensorflow”的记录器。

然后_logger = _logging.getLogger('tensorflow')将使用配置文件中的记录器和指定的处理程序。