Fix overriding global log level on module level (#918)
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Sat, 11 Nov 2023 11:41:53 +0000 (12:41 +0100)
committerGitHub <noreply@github.com>
Sat, 11 Nov 2023 11:41:53 +0000 (12:41 +0100)
music_assistant/server/models/core_controller.py
music_assistant/server/providers/chromecast/__init__.py

index 6018c095aa8caeeacd34aeb784467ae53cb3e324..24199d8b8e08f926619c5ccef5d7ea1f6b1b6634 100644 (file)
@@ -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)
index 36c9b8c90f5300ad5b7e4d4dcce12068dd681364..daa3f57b9a2800d7f80965cb01f70abd344469ea 100644 (file)
@@ -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)