"""Structured logging setup with structlog.""" import logging import sys import structlog from app.core.config import get_settings settings = get_settings() def setup_logging() -> None: level = getattr(logging, settings.log_level.upper(), logging.INFO) logging.basicConfig( format="%(message)s", stream=sys.stdout, level=level, ) processors: list = [ structlog.contextvars.merge_contextvars, structlog.processors.add_log_level, structlog.processors.TimeStamper(fmt="iso", utc=True), structlog.processors.StackInfoRenderer(), structlog.processors.format_exc_info, ] if settings.log_format == "json": processors.append(structlog.processors.JSONRenderer()) else: processors.append(structlog.dev.ConsoleRenderer()) structlog.configure( processors=processors, wrapper_class=structlog.make_filtering_bound_logger(level), logger_factory=structlog.PrintLoggerFactory(), cache_logger_on_first_use=True, ) def get_logger(name: str) -> structlog.stdlib.BoundLogger: return structlog.get_logger(name) # type: ignore[no-any-return]