在 pytest 中禁用特定记录器

mbe*_*ski 11 python logging pytest python-logging

在我的项目中,我使用 pdfplumber 解析一些 PDF 文件。在测试执行(pytest)期间,我有时希望查看代码中的日志以进行调试。这可以通过设置来完成--log-cli-level=DEBUG。然而,这会打开来自所有代码的消息,还有 pdfplumber - 这非常冗长并且使调试变得困难。有没有办法在测试运行期间有选择地启用/禁用记录器?

pytest 4.6.3
python 3.7.3

感谢帮助!

Ale*_*ing 9

Pytest 默认情况下不支持此功能,但您可以添加自定义选项conftest.py来关闭特定记录器。

import pytest
import logging

def pytest_addoption(parser):
    """Add a command line option to disable logger."""
    parser.addoption(
        "--log-disable", action="append", default=[], help="disable specific loggers"
    )

def pytest_configure(config):
    """Disable the loggers."""
    for name in config.getoption("--log-disable", default=[]):
        logger = logging.getLogger(name)
        logger.propagate = False
Run Code Online (Sandbox Code Playgroud)

对于 pytest 7.3.0 及更高版本:

pytest现在支持--log-disable无需自定义选项。 https://docs.pytest.org/en/7.4.x/how-to/logging.html