From b51153e5a2483a23ffc40282a4ce4028cfed342e Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Sat, 11 Nov 2023 12:41:53 +0100 Subject: [PATCH] Fix overriding global log level on module level (#918) --- .../server/models/core_controller.py | 27 ++++++++++++------- .../server/providers/chromecast/__init__.py | 3 +++ 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/music_assistant/server/models/core_controller.py b/music_assistant/server/models/core_controller.py index 6018c095..24199d8b 100644 --- a/music_assistant/server/models/core_controller.py +++ b/music_assistant/server/models/core_controller.py @@ -26,12 +26,7 @@ class CoreController: def __init__(self, mass: MusicAssistant) -> None: """Initialize MusicProvider.""" self.mass = mass - self.logger = logging.getLogger(f"{ROOT_LOGGER_NAME}.{self.domain}") - log_level = self.mass.config.get_raw_core_config_value( - self.domain, CONF_LOG_LEVEL, "GLOBAL" - ) - if log_level != "GLOBAL": - self.logger.setLevel(log_level) + self._set_logger() self.manifest = ProviderManifest( type=ProviderType.CORE, domain=self.domain, @@ -61,7 +56,21 @@ class CoreController: if config is None: config = await self.mass.config.get_core_config(self.domain) log_level = config.get_value(CONF_LOG_LEVEL) - if log_level == "GLOBAL": - log_level = logging.getLogger(ROOT_LOGGER_NAME).level - self.logger.setLevel(log_level) + self._set_logger(log_level) await self.setup(config) + + def _set_logger(self, log_level: int | None = None) -> None: + """Set the logger settings.""" + mass_logger = logging.getLogger(ROOT_LOGGER_NAME) + self.logger = logging.getLogger(f"{ROOT_LOGGER_NAME}.{self.domain}") + if log_level is None: + log_level = self.mass.config.get_raw_core_config_value( + self.domain, CONF_LOG_LEVEL, "GLOBAL" + ) + if log_level == "GLOBAL": + self.logger.setLevel(mass_logger.level) + else: + self.logger.setLevel(log_level) + # if the root logger's level is higher, we need to adjust that too + if logging.getLogger().level > self.logger.level: + logging.getLogger().setLevel(self.logger.level) diff --git a/music_assistant/server/providers/chromecast/__init__.py b/music_assistant/server/providers/chromecast/__init__.py index 36c9b8c9..daa3f57b 100644 --- a/music_assistant/server/providers/chromecast/__init__.py +++ b/music_assistant/server/providers/chromecast/__init__.py @@ -3,6 +3,7 @@ from __future__ import annotations import asyncio import contextlib +import logging import threading import time from dataclasses import dataclass @@ -127,6 +128,8 @@ class ChromecastProvider(PlayerProvider): ), self.mass.zeroconf, ) + # silence pychromecast logging + logging.getLogger("pychromecast").setLevel(self.logger.level) # start discovery in executor await self.mass.loop.run_in_executor(None, self.browser.start_discovery) -- 2.34.1