From 834f55eddbeaa318e8be43c6f799c96bdc6d0885 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sun, 23 Aug 2020 12:06:09 +0300 Subject: [PATCH] Merge pull request #7673 from bluetech/logging-fix-handler-restore logging: fix handler level restored incorrectly if caplog.set_level is called more than once (cherry picked from commit 143e3ab84631280ddf7f031e4c6f91ca4ac2b500) --- changelog/7672.bugfix.rst | 1 + src/_pytest/logging.py | 3 ++- testing/logging/test_fixture.py | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 changelog/7672.bugfix.rst diff --git a/changelog/7672.bugfix.rst b/changelog/7672.bugfix.rst new file mode 100644 index 000000000..88608e161 --- /dev/null +++ b/changelog/7672.bugfix.rst @@ -0,0 +1 @@ +Fixed log-capturing level restored incorrectly if ``caplog.set_level`` is called more than once. diff --git a/src/_pytest/logging.py b/src/_pytest/logging.py index 0ee9457ea..6c422647d 100644 --- a/src/_pytest/logging.py +++ b/src/_pytest/logging.py @@ -437,7 +437,8 @@ class LogCaptureFixture: # save the original log-level to restore it during teardown self._initial_logger_levels.setdefault(logger, logger_obj.level) logger_obj.setLevel(level) - self._initial_handler_level = self.handler.level + if self._initial_handler_level is None: + self._initial_handler_level = self.handler.level self.handler.setLevel(level) @contextmanager diff --git a/testing/logging/test_fixture.py b/testing/logging/test_fixture.py index 6e5e9c2b4..f18d7087d 100644 --- a/testing/logging/test_fixture.py +++ b/testing/logging/test_fixture.py @@ -65,6 +65,7 @@ def test_change_level_undos_handler_level(testdir: Testdir) -> None: def test1(caplog): assert caplog.handler.level == 0 + caplog.set_level(9999) caplog.set_level(41) assert caplog.handler.level == 41