pytest-catchlog
pytest-catchlog copied to clipboard
caplog.set_level has side effects if logger name is passed explicitly
If I pass logger name to caplog.set_level like this
caplog.set_level(logging.ERROR, logger='package.utils')
then for all following test cases that logger will have level set to ERROR, which is not expected.
I've fixed that with the following custom fixture, please let me know if it worth a PR
import logging
from pytest_catchlog import LogCaptureFixture
class CustomLogCaptureFixture(LogCaptureFixture):
def __init__(self, item, monkeypatch):
super().__init__(item)
self._monkeypatch = monkeypatch
def set_level(self, level, logger=None):
obj = logger and logging.getLogger(logger) or self.handler
self._monkeypatch.setattr(obj, 'level', logging._checkLevel(level))
@pytest.fixture()
def caplog(request, monkeypatch):
"""Custom caplog fixture that fixes set_level side effects"""
return CustomLogCaptureFixture(request.node, monkeypatch)
@chekunkov Looks good at the first glance, thank you!