在pytest中禁用特定的记录器
Disabling specific logger in pytest
在我的项目中,我正在使用 pdfplumber 解析一些 PDF 文件。在测试执行 (pytest) 期间,我有时希望查看代码中的日志以进行调试。这可以通过设置 --log-cli-level=DEBUG
来完成。但是,这会打开来自所有代码的消息,还有 pdfplumber - 这非常冗长并且使调试变得困难。有没有办法在测试 运行 期间选择性地 enable/disable 记录器?
pytest 4.6.3
python3.7.3
感谢帮助!
不,据我所知,pytest 无法为您执行此操作。我能想到的是引入您自己的环境变量并相应地更改日志级别。像这样:
import os
import logging
logger = logging.getLogger('mylogger')
if os.environ.get('mylogger_level'):
logger.setLevel(os.environ.get('mylogger_level'))
默认情况下 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
在我的项目中,我正在使用 pdfplumber 解析一些 PDF 文件。在测试执行 (pytest) 期间,我有时希望查看代码中的日志以进行调试。这可以通过设置 --log-cli-level=DEBUG
来完成。但是,这会打开来自所有代码的消息,还有 pdfplumber - 这非常冗长并且使调试变得困难。有没有办法在测试 运行 期间选择性地 enable/disable 记录器?
pytest 4.6.3
python3.7.3
感谢帮助!
不,据我所知,pytest 无法为您执行此操作。我能想到的是引入您自己的环境变量并相应地更改日志级别。像这样:
import os
import logging
logger = logging.getLogger('mylogger')
if os.environ.get('mylogger_level'):
logger.setLevel(os.environ.get('mylogger_level'))
默认情况下 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