0

我正在使用python 3.7.6. 和用于记录消息的 abseil 模块with absl-py 0.9.0。我正在使用这段代码进行测试。

from absl import logging
from absl import app

def main(argv):

    #logging.set_stderrthreshold(logging.ERROR)
    #logging._warn_preinit_stderr = False
    logging.set_verbosity(logging.DEBUG)

    print(' 0 -----')
    logging.debug(' 1 logging-debug-test')
    logging.info(' 2 logging-info-test')
    logging.warning(' 3 logging-warning-test')
    logging.error('4 logging-error-test')
    print(' 5 -----')

if __name__ == '__main__':
    app.run(main)

在 aJupyter notebook中对其进行测试时,从背景的颜色代码中可以清楚地看出,abseil 消息在 stderr 流中。

在此处输入图像描述

在 shell 中执行 python 代码时同样的事情: 我尝试了一些具有不同值的东西,例如:在此处输入图像描述 在此处输入图像描述

logging.set_stderrthreshold(logging.DEBUG)
logging._warn_preinit_stderr = True

但我仍然看到 100% 相同的输出。

  • 如何将输出 abseil 日志消息重定向到 stdout 而不是 stderr ?
  • 是否期望日志输出消息重定向到 stderr 而不是 stdout?我可能遗漏了一些日志记录逻辑,我想更好地理解它。
4

2 回答 2

2

有人告诉我这是标准行为,也是 Python 的标准日志记录模块的作用。在我的情况下,添加以下行将日志消息重定向到标准输出:

logging.get_absl_handler().python_handler.stream = sys.stdout

现在在我的 Jupyter 笔记本中,它看起来像这样: 在此处输入图像描述

于 2020-05-18T17:16:51.697 回答
0

由于某种原因,这对我不起作用:

from absl import logging
import sys

logging.get_absl_handler().python_handler.stream = sys.stdout

但这确实:

import logging
import sys

logging.basicConfig(stream=sys.stdout)
于 2021-12-30T05:08:52.140 回答