如何将 abseil 日志消息重定向到 stout 而不是 stderr?

How to redirect abseil logging messages to stout instead of stderr?

我正在使用 python 3.7.6。和用于记录消息 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)

Jupyter notebook中测试它时,从背景的颜色代码可以清楚地看出绳降消息在标准错误流中。

在 shell 中执行 python 代码时同样如此:
我尝试了一些具有不同值的东西,例如:

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

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

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

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

现在在我的 Jupyter notebook 中它看起来像这样:

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

from absl import logging
import sys

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

但这确实发生了:

import logging
import sys

logging.basicConfig(stream=sys.stdout)