diff --git a/homeassistant/components/logger/helpers.py b/homeassistant/components/logger/helpers.py index 87ec2cc8cd5256ec1e81122aa297bcbe308f741d..bf37ab3625b669aebe9471c06595c18311ea0e8f 100644 --- a/homeassistant/components/logger/helpers.py +++ b/homeassistant/components/logger/helpers.py @@ -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. +""" diff --git a/homeassistant/components/logger/websocket_api.py b/homeassistant/components/logger/websocket_api.py index 89026a07b8a072c46683453a83b3d871b7db8724..240db3144af040129fae42c9a1c249cae3861abd 100644 --- a/homeassistant/components/logger/websocket_api.py +++ b/homeassistant/components/logger/websocket_api.py @@ -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(), }