""" Logging configuration for Magpie. Call configure_logging() once at app startup (in lifespan). Writes to stdout — uvicorn captures stdout to $LOG_API via manage.sh. Format: timestamp [LEVEL] module: message """ from __future__ import annotations import logging import sys def configure_logging(level: str = "INFO") -> None: """Apply a consistent log format across all loggers.""" fmt = "%(asctime)s [%(levelname)s] %(name)s: %(message)s" datefmt = "%Y-%m-%d %H:%M:%S" handler = logging.StreamHandler(sys.stdout) handler.setFormatter(logging.Formatter(fmt, datefmt=datefmt)) root = logging.getLogger() # Avoid double-adding if called more than once (e.g. --reload) if not root.handlers: root.addHandler(handler) root.setLevel(getattr(logging, level.upper(), logging.INFO)) # Quiet noisy third-party loggers logging.getLogger("httpx").setLevel(logging.WARNING) logging.getLogger("httpcore").setLevel(logging.WARNING) logging.getLogger("apscheduler").setLevel(logging.WARNING) logging.getLogger("urllib3").setLevel(logging.WARNING)