Fix logger creating many thread locks when reloading the integrations page (#93768)
* Fix logger creating many thread locks We call getLogger for each integration to get the current log level when loading the integrations page. This creates a storm of threading locks * fixespull/108002/head
parent
d8564eba17
commit
e4a15354f4
|
@ -6,6 +6,7 @@ from collections.abc import Mapping
|
|||
import contextlib
|
||||
from dataclasses import asdict, dataclass
|
||||
from enum import StrEnum
|
||||
from functools import lru_cache
|
||||
import logging
|
||||
from typing import Any, cast
|
||||
|
||||
|
@ -216,3 +217,11 @@ class LoggerSettings:
|
|||
)
|
||||
|
||||
return dict(combined_logs)
|
||||
|
||||
|
||||
get_logger = lru_cache(maxsize=256)(logging.getLogger)
|
||||
"""Get a logger.
|
||||
|
||||
getLogger uses a threading.RLock, so we cache the result to avoid
|
||||
locking the threads every time the integrations page is loaded.
|
||||
"""
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
"""Websocket API handlers for the logger integration."""
|
||||
import logging
|
||||
from typing import Any
|
||||
|
||||
import voluptuous as vol
|
||||
|
@ -16,6 +15,7 @@ from .helpers import (
|
|||
LogPersistance,
|
||||
LogSettingsType,
|
||||
async_get_domain_config,
|
||||
get_logger,
|
||||
)
|
||||
|
||||
|
||||
|
@ -38,7 +38,7 @@ def handle_integration_log_info(
|
|||
[
|
||||
{
|
||||
"domain": integration,
|
||||
"level": logging.getLogger(
|
||||
"level": get_logger(
|
||||
f"homeassistant.components.{integration}"
|
||||
).getEffectiveLevel(),
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue