"""structlog setup — JSON to stdout, ready for Docker json-file driver.""" from __future__ import annotations import logging import sys import structlog def configure_logging(level: str = "INFO") -> None: logging.basicConfig( format="%(message)s", stream=sys.stdout, level=getattr(logging, level.upper(), logging.INFO), ) structlog.configure( processors=[ structlog.contextvars.merge_contextvars, structlog.processors.add_log_level, structlog.processors.TimeStamper(fmt="iso", utc=True), structlog.processors.StackInfoRenderer(), structlog.processors.format_exc_info, structlog.processors.JSONRenderer(), ], wrapper_class=structlog.make_filtering_bound_logger( getattr(logging, level.upper(), logging.INFO) ), context_class=dict, logger_factory=structlog.PrintLoggerFactory(), cache_logger_on_first_use=True, ) def get_logger(name: str | None = None) -> structlog.stdlib.BoundLogger: return structlog.get_logger(name)