From d71f913a12e244397144a706547f19861e563e65 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 14 Apr 2021 22:53:48 -1000 Subject: [PATCH] Ensure original log handlers are restored at close (#49230) Error messages after close were not being logged --- homeassistant/util/logging.py | 3 +++ tests/util/test_logging.py | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/homeassistant/util/logging.py b/homeassistant/util/logging.py index 816af95718d..1c0ff3de5d7 100644 --- a/homeassistant/util/logging.py +++ b/homeassistant/util/logging.py @@ -77,6 +77,9 @@ def async_activate_log_queue_handler(hass: HomeAssistant) -> None: @callback def _async_stop_queue_handler(_: Any) -> None: """Cleanup handler.""" + # Ensure any messages that happen after close still get logged + for original_handler in migrated_handlers: + logging.root.addHandler(original_handler) logging.root.removeHandler(queue_handler) listener.stop() diff --git a/tests/util/test_logging.py b/tests/util/test_logging.py index 9277d92f368..a1fd8440971 100644 --- a/tests/util/test_logging.py +++ b/tests/util/test_logging.py @@ -7,6 +7,7 @@ from unittest.mock import patch import pytest +from homeassistant.const import EVENT_HOMEASSISTANT_CLOSE from homeassistant.core import callback, is_callback import homeassistant.util.logging as logging_util @@ -65,11 +66,18 @@ async def test_logging_with_queue_handler(): async def test_migrate_log_handler(hass): """Test migrating log handlers.""" + original_handlers = logging.root.handlers + logging_util.async_activate_log_queue_handler(hass) assert len(logging.root.handlers) == 1 assert isinstance(logging.root.handlers[0], logging_util.HomeAssistantQueueHandler) + hass.bus.async_fire(EVENT_HOMEASSISTANT_CLOSE) + await hass.async_block_till_done() + + assert logging.root.handlers == original_handlers + @pytest.mark.no_fail_on_log_exception async def test_async_create_catching_coro(hass, caplog):