Improve logging shutdown (#85812)
* Improve logging shutdown * Update test
This commit is contained in:
parent
f6cd399b9e
commit
f93bbd55ba
2 changed files with 20 additions and 19 deletions
|
@ -11,7 +11,6 @@ import queue
|
|||
import traceback
|
||||
from typing import Any, TypeVar, cast, overload
|
||||
|
||||
from homeassistant.const import EVENT_HOMEASSISTANT_CLOSE
|
||||
from homeassistant.core import HomeAssistant, callback, is_callback
|
||||
|
||||
_T = TypeVar("_T")
|
||||
|
@ -35,6 +34,8 @@ class HideSensitiveDataFilter(logging.Filter):
|
|||
class HomeAssistantQueueHandler(logging.handlers.QueueHandler):
|
||||
"""Process the log in another thread."""
|
||||
|
||||
listener: logging.handlers.QueueListener | None = None
|
||||
|
||||
def prepare(self, record: logging.LogRecord) -> logging.LogRecord:
|
||||
"""Prepare a record for queuing.
|
||||
|
||||
|
@ -62,6 +63,18 @@ class HomeAssistantQueueHandler(logging.handlers.QueueHandler):
|
|||
self.emit(record)
|
||||
return return_value
|
||||
|
||||
def close(self) -> None:
|
||||
"""
|
||||
Tidy up any resources used by the handler.
|
||||
|
||||
This adds shutdown of the QueueListener
|
||||
"""
|
||||
super().close()
|
||||
if not self.listener:
|
||||
return
|
||||
self.listener.stop()
|
||||
self.listener = None
|
||||
|
||||
|
||||
@callback
|
||||
def async_activate_log_queue_handler(hass: HomeAssistant) -> None:
|
||||
|
@ -83,20 +96,10 @@ def async_activate_log_queue_handler(hass: HomeAssistant) -> None:
|
|||
migrated_handlers.append(handler)
|
||||
|
||||
listener = logging.handlers.QueueListener(simple_queue, *migrated_handlers)
|
||||
queue_handler.listener = listener
|
||||
|
||||
listener.start()
|
||||
|
||||
@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()
|
||||
|
||||
hass.bus.async_listen_once(EVENT_HOMEASSISTANT_CLOSE, _async_stop_queue_handler)
|
||||
|
||||
|
||||
def log_exception(format_err: Callable[..., Any], *args: Any) -> None:
|
||||
"""Log an exception with additional context."""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue