【发布时间】:2022-10-23 21:27:07
【问题描述】:
根据我的阅读和理解,Python 日志记录模块默认记录到标准错误。
如果我运行这个 python 代码:
import logging
logging.info('test')
logging.warning('test')
logging.error('test')
logging.debug('test')
作为
python main.py 1> stdout.txt 2> stderr.txt
我在 stderr.txt 中获取日志,而在 stdout.txt 中没有任何内容 - 我的日志被重定向到 stderr。
当日志流式传输到日志聚合服务(例如 datadog 或 papertrail)时,此默认行为会出现问题。由于它流式传输到 stderr,因此日志被标记为错误,而实际上它们不是。
所以我尝试创建多个日志处理程序,如下所示:
import logging
import sys
stdoutHandler = logging.StreamHandler(stream=sys.stdout)
stderrHandler = logging.StreamHandler(stream=sys.stderr)
logging.basicConfig(level=logging.DEBUG, handlers=[stdoutHandler, stderrHandler])
stdoutHandler.setLevel(logging.DEBUG)
stderrHandler.setLevel(logging.ERROR)
logging.info('test')
logging.warning('test')
logging.error('test')
logging.debug('test')
当我运行此代码时,我在 sterr.txt 和 stdout.txt 中的所有日志中都出现错误 - 我最终在 stderr 和 stdout 流中都出现了日志重复错误日志。
有没有更好的方法来处理 Python 中错误日志与其他日志的区别?
我也尝试了loguru 包,在流分离方面也没有运气...... 提前致谢
【问题讨论】:
标签: python logging stdout stderr observability