pytest测试中如何屏蔽Python backoff库的INFO日志仅保留ERROR日志
问题原因
你之前配置的logging.basicConfig、dictConfig不生效,是因为pytest的日志插件会在测试运行阶段覆盖全局日志配置,自定义的全局配置优先级更低,不会生效。
可选解决方案
方案1:通过pytest配置全局过滤backoff的INFO日志(推荐,全局生效)
直接在pytest配置文件(pytest.ini/pyproject.toml/tox.ini任选其一)中指定backoff日志器的最低输出级别为WARNING,INFO级别的重试日志就会被自动过滤,ERROR级别的放弃日志会正常保留:
如果是pytest.ini,添加如下配置:
[pytest] log_level = INFO log_logger_levels = backoff:WARNING
如果是pyproject.toml,添加如下配置:
[tool.pytest.ini_options] log_level = "INFO" log_logger_levels = ["backoff:WARNING"]
方案2:单个测试用例临时过滤(不影响全局配置)
如果只需要在部分测试用例中屏蔽重试日志,可以在测试用例中使用logging模块临时修改backoff日志器的级别,测试结束后恢复原级别:
import logging def test_get_assigned_task(): backoff_logger = logging.getLogger("backoff") # 保存原有日志级别 original_level = backoff_logger.level # 临时设置仅输出WARNING及以上级别日志 backoff_logger.setLevel(logging.WARNING) # 测试逻辑 # your test code here # 恢复原有日志级别,避免影响其他测试 backoff_logger.setLevel(original_level)
方案3:直接修改backoff装饰器配置(从源头控制日志输出)
backoff装饰器本身提供了日志级别控制参数,你可以直接指定重试阶段的日志级别为DEBUG,不修改任何测试配置就能实现需求:
import logging import backoff @backoff.on_exception( backoff.constant, AssertionError, max_time=4, # 重试日志级别调整为DEBUG,默认是INFO backoff_log_level=logging.DEBUG ) def get_assigned_task(self): # 原有逻辑 pass
这个方案不需要修改任何测试侧配置,也不会影响其他backoff装饰器的日志输出。
内容的提问来源于stack exchange,提问作者55555Random
相关产品推荐
相关产品推荐

