From 634698b027fbbfe10d3f713367cfa1499093a7bd Mon Sep 17 00:00:00 2001 From: dschlueter Date: Thu, 25 Jun 2026 19:03:54 +0200 Subject: [PATCH] fix: App-Logger sichtbar machen (Notruf-Diagnose im Log) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit uvicorn konfiguriert nur seine eigenen Logger -> app.*-INFO-Logs (u. a. die Notruf-Diagnosezeile geo/geo_error/device) wurden durch den Default-Level (WARNING) verschluckt. main.py setzt jetzt den "app"-Logger auf LOG_LEVEL (Default INFO) mit eigenem Handler (propagate=False, kein Doppel-Log). Verifiziert: "INFO:app.safety.emergency:Notruf von … geo=… device=…" erscheint. +1 Test, Suite 251 grün. Co-Authored-By: Claude Opus 4.8 --- app/main.py | 15 +++++++++++++++ tests/test_logging_config.py | 11 +++++++++++ 2 files changed, 26 insertions(+) create mode 100644 tests/test_logging_config.py diff --git a/app/main.py b/app/main.py index bea8e60..914c9f2 100644 --- a/app/main.py +++ b/app/main.py @@ -26,6 +26,21 @@ from app.api.me import router as me_router from app.api.metrics import router as metrics_router from app.api.ws import router as ws_router +# --- Logging: App-eigene Logger sichtbar machen --------------------------- +# uvicorn konfiguriert nur seine eigenen Logger; "app.*"-INFO-Logs (z. B. die +# Notruf-Diagnose) würden sonst durch den Default-Level (WARNING) verschluckt. +import logging +import os + +_app_logger = logging.getLogger("app") +_app_logger.setLevel(getattr(logging, os.getenv("LOG_LEVEL", "INFO").upper(), logging.INFO)) +if not _app_logger.handlers: + _log_handler = logging.StreamHandler() + _log_handler.setFormatter(logging.Formatter("%(levelname)s:%(name)s:%(message)s")) + _app_logger.addHandler(_log_handler) + _app_logger.propagate = False + + @asynccontextmanager async def _lifespan(app: FastAPI): # Lokale Modelle im Hintergrund vorladen -> Server ist sofort verfuegbar, diff --git a/tests/test_logging_config.py b/tests/test_logging_config.py new file mode 100644 index 0000000..020dbf9 --- /dev/null +++ b/tests/test_logging_config.py @@ -0,0 +1,11 @@ +import logging + +import app.main # noqa: F401 — Import konfiguriert den "app"-Logger + + +def test_app_logger_visible_at_info(): + lg = logging.getLogger("app") + assert lg.level == logging.INFO # Default (LOG_LEVEL nicht gesetzt) + assert lg.handlers, "app-Logger braucht einen eigenen Handler" + # Die Notruf-Diagnose nutzt diesen Logger -> effektives Level erlaubt INFO. + assert logging.getLogger("app.safety.emergency").isEnabledFor(logging.INFO)