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

* fixes
pull/108002/head
J. Nick Koston 2024-01-13 16:11:34 -10:00 committed by GitHub
parent d8564eba17
commit e4a15354f4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 2 deletions

View File

@ -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.
"""

View File

@ -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(),
}