mirror of
https://github.com/home-assistant/core.git
synced 2025-07-18 10:47:10 +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 functools
|
||||||
import itertools
|
import itertools
|
||||||
import logging
|
import logging
|
||||||
|
import queue
|
||||||
import re
|
import re
|
||||||
import time
|
import time
|
||||||
from types import MappingProxyType
|
from types import MappingProxyType
|
||||||
@ -111,9 +112,10 @@ from homeassistant.helpers import (
|
|||||||
device_registry as dr,
|
device_registry as dr,
|
||||||
entity_registry as er,
|
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.entity_platform import AddEntitiesCallback
|
||||||
from homeassistant.helpers.typing import ConfigType
|
from homeassistant.helpers.typing import ConfigType
|
||||||
|
from homeassistant.util.logging import HomeAssistantQueueHandler
|
||||||
|
|
||||||
from .const import (
|
from .const import (
|
||||||
ATTR_ACTIVE_COORDINATOR,
|
ATTR_ACTIVE_COORDINATOR,
|
||||||
@ -505,7 +507,14 @@ class ZHAGatewayProxy(EventBase):
|
|||||||
DEBUG_LEVEL_CURRENT: async_capture_log_levels(),
|
DEBUG_LEVEL_CURRENT: async_capture_log_levels(),
|
||||||
}
|
}
|
||||||
self.debug_enabled: bool = False
|
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: list[Callable[[], None]] = []
|
||||||
self._unsubs.append(self.gateway.on_all_events(self._handle_event_protocol))
|
self._unsubs.append(self.gateway.on_all_events(self._handle_event_protocol))
|
||||||
self._reload_task: asyncio.Task | None = None
|
self._reload_task: asyncio.Task | None = None
|
||||||
@ -736,10 +745,13 @@ class ZHAGatewayProxy(EventBase):
|
|||||||
self._log_levels[DEBUG_LEVEL_CURRENT] = async_capture_log_levels()
|
self._log_levels[DEBUG_LEVEL_CURRENT] = async_capture_log_levels()
|
||||||
|
|
||||||
if filterer:
|
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:
|
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
|
self.debug_enabled = True
|
||||||
|
|
||||||
@ -749,9 +761,14 @@ class ZHAGatewayProxy(EventBase):
|
|||||||
async_set_logger_levels(self._log_levels[DEBUG_LEVEL_ORIGINAL])
|
async_set_logger_levels(self._log_levels[DEBUG_LEVEL_ORIGINAL])
|
||||||
self._log_levels[DEBUG_LEVEL_CURRENT] = async_capture_log_levels()
|
self._log_levels[DEBUG_LEVEL_CURRENT] = async_capture_log_levels()
|
||||||
for logger_name in DEBUG_RELAY_LOGGERS:
|
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:
|
if filterer:
|
||||||
self._log_relay_handler.removeFilter(filterer)
|
self._log_queue_handler.removeFilter(filterer)
|
||||||
|
|
||||||
self.debug_enabled = False
|
self.debug_enabled = False
|
||||||
|
|
||||||
async def shutdown(self) -> None:
|
async def shutdown(self) -> None:
|
||||||
@ -978,7 +995,7 @@ class LogRelayHandler(logging.Handler):
|
|||||||
entry = LogEntry(
|
entry = LogEntry(
|
||||||
record, self.paths_re, figure_out_source=record.levelno >= logging.WARNING
|
record, self.paths_re, figure_out_source=record.levelno >= logging.WARNING
|
||||||
)
|
)
|
||||||
async_dispatcher_send(
|
dispatcher_send(
|
||||||
self.hass,
|
self.hass,
|
||||||
ZHA_GW_MSG,
|
ZHA_GW_MSG,
|
||||||
{ATTR_TYPE: ZHA_GW_MSG_LOG_OUTPUT, ZHA_GW_MSG_LOG_ENTRY: entry.to_dict()},
|
{ATTR_TYPE: ZHA_GW_MSG_LOG_OUTPUT, ZHA_GW_MSG_LOG_ENTRY: entry.to_dict()},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user