首页 > 解决方案 > 使日志记录模块将所有日志仅写入stderr

问题描述

我正在使用 pytest 测试产生一些输出的 CLI。在运行测试时,我想将 CLI 的日志级别设置为 DEBUG。但是,我不希望 CLI 日志干扰解析 CLI 输出的测试。

如何使日志记录模块将所有日志仅发送到 stderr?我查看了这篇文章,但它谈到了除了标准输出之外将日志发送到标准错误。

标签: pythonloggingpyteststderr

解决方案


执行与链接答案相同的操作,但将 stdout 替换为 stderr。因此,如果您想专门将日志转到 stderr,您将创建一个处理程序logging.StreamHandler(sys.stderr)并确保这是唯一的活动处理程序。

正如@Tomerikoo 正确指出的那样,您不需要做任何事情,因为日志记录默认使用带有stderr 的StreamHandler。下面代码的唯一真正价值是它设置了与默认值不同的级别。只是logging.warning('log')没有其他设置将向 stderr 发送日志。

附录:您也可以使用 basicConfig 来实现此目的,以减少样板代码。

import logging
import sys
logging.basicConfig(stream=sys.stderr, level=logging.INFO)
logging.info('test') # sends log to stderr

推荐阅读