fix: App-Logger sichtbar machen (Notruf-Diagnose im Log)

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 <noreply@anthropic.com>
This commit is contained in:
Dieter Schlüter 2026-06-25 19:03:54 +02:00
commit 634698b027
2 changed files with 26 additions and 0 deletions

View file

@ -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,

View file

@ -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)