mirror of
https://github.com/home-assistant/core.git
synced 2025-07-16 17:57:11 +00:00
Move ZHA debug logs handling out of event loop (#138568)
This commit is contained in:
parent
67fcbc4c28
commit
25296e1b8f
@ -11,6 +11,7 @@ import enum
|
||||
import functools
|
||||
import itertools
|
||||
import logging
|
||||
import queue
|
||||
import re
|
||||
import time
|
||||
from types import MappingProxyType
|
||||
@ -111,9 +112,10 @@ from homeassistant.helpers import (
|
||||
device_registry as dr,
|
||||
entity_registry as er,
|
||||
)
|
||||
from homeassistant.helpers.dispatcher import async_dispatcher_send
|
||||
from homeassistant.helpers.dispatcher import async_dispatcher_send, dispatcher_send
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.helpers.typing import ConfigType
|
||||
from homeassistant.util.logging import HomeAssistantQueueHandler
|
||||
|
||||
from .const import (
|
||||
ATTR_ACTIVE_COORDINATOR,
|
||||
@ -505,7 +507,14 @@ class ZHAGatewayProxy(EventBase):
|
||||
DEBUG_LEVEL_CURRENT: async_capture_log_levels(),
|
||||
}
|
||||
self.debug_enabled: bool = False
|
||||
self._log_relay_handler: LogRelayHandler = LogRelayHandler(hass, self)
|
||||
|
||||
log_relay_handler: LogRelayHandler = LogRelayHandler(hass, self)
|
||||
log_simple_queue: queue.SimpleQueue[logging.Handler] = queue.SimpleQueue()
|
||||
self._log_queue_handler = HomeAssistantQueueHandler(log_simple_queue)
|
||||
self._log_queue_handler.listener = logging.handlers.QueueListener(
|
||||
log_simple_queue, log_relay_handler
|
||||
)
|
||||
|
||||
self._unsubs: list[Callable[[], None]] = []
|
||||
self._unsubs.append(self.gateway.on_all_events(self._handle_event_protocol))
|
||||
self._reload_task: asyncio.Task | None = None
|
||||
@ -736,10 +745,13 @@ class ZHAGatewayProxy(EventBase):
|
||||
self._log_levels[DEBUG_LEVEL_CURRENT] = async_capture_log_levels()
|
||||
|
||||
if filterer:
|
||||
self._log_relay_handler.addFilter(filterer)
|
||||
self._log_queue_handler.addFilter(filterer)
|
||||
|
||||
if self._log_queue_handler.listener:
|
||||
self._log_queue_handler.listener.start()
|
||||
|
||||
for logger_name in DEBUG_RELAY_LOGGERS:
|
||||
logging.getLogger(logger_name).addHandler(self._log_relay_handler)
|
||||
logging.getLogger(logger_name).addHandler(self._log_queue_handler)
|
||||
|
||||
self.debug_enabled = True
|
||||
|
||||
@ -749,9 +761,14 @@ class ZHAGatewayProxy(EventBase):
|
||||
async_set_logger_levels(self._log_levels[DEBUG_LEVEL_ORIGINAL])
|
||||
self._log_levels[DEBUG_LEVEL_CURRENT] = async_capture_log_levels()
|
||||
for logger_name in DEBUG_RELAY_LOGGERS:
|
||||
logging.getLogger(logger_name).removeHandler(self._log_relay_handler)
|
||||
logging.getLogger(logger_name).removeHandler(self._log_queue_handler)
|
||||
|
||||
if self._log_queue_handler.listener:
|
||||
self._log_queue_handler.listener.stop()
|
||||
|
||||
if filterer:
|
||||
self._log_relay_handler.removeFilter(filterer)
|
||||
self._log_queue_handler.removeFilter(filterer)
|
||||
|
||||
self.debug_enabled = False
|
||||
|
||||
async def shutdown(self) -> None:
|
||||
@ -978,7 +995,7 @@ class LogRelayHandler(logging.Handler):
|
||||
entry = LogEntry(
|
||||
record, self.paths_re, figure_out_source=record.levelno >= logging.WARNING
|
||||
)
|
||||
async_dispatcher_send(
|
||||
dispatcher_send(
|
||||
self.hass,
|
||||
ZHA_GW_MSG,
|
||||
{ATTR_TYPE: ZHA_GW_MSG_LOG_OUTPUT, ZHA_GW_MSG_LOG_ENTRY: entry.to_dict()},
|
||||
|
Loading…
x
Reference in New Issue
Block a user