0

我们正在尝试引入 python登录现有的 python 项目。

由于我们在代码中已经有更多的打印语句,我们决定使用以下语句将所有打印日志重定向到日志文件。

import logging, sys
import os
from logging.handlers import TimedRotatingFileHandler
formatter = logging.Formatter("%(asctime)s - %(pathname)s - %(funcName)s - %(levelname)s - %(message)s")
log_path = '/logs/server.log'
handler = TimedRotatingFileHandler(filename=log_path, when='midnight')
handler.setFormatter(formatter)
log = logging.getLogger()
log.setLevel(logging.DEBUG)
log.addHandler(handler)
sys.stderr.write = log.error
sys.stdout.write = log.info

但是,它打印两行,第二行作为空日志。

2020-09-21 09:03:05,978 - utils.py - logger - INFO - <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>
2020-09-21 09:03:05,978 - utils.py - logger - INFO -

2020-09-21 09:03:05,978 - utils.py - logger - INFO - 1600693385   Mon Sep 21 09:03:05 2020        19882 Registering functions
2020-09-21 09:03:05,978 - utils.py - logger - INFO -

它适用于记录功能,例如info, error。它只给出打印问题。

如果有人知道它的原因,那将是很大的帮助。

更详细地说,我们使用gunicorn作为服务器,使用falcon作为休息框架。

4

1 回答 1

1

您不应该修改 stdout 和 stderr 的写入函数,而是为 info 和 error 添加一个流处理程序(一个在 stdout 上,另一个在 stderr 上)

您可以在此处找到关于 SO 的示例:https ://stackoverflow.com/a/31459386/14306518

于 2020-09-22T05:51:43.453 回答