import logging from contextvars import ContextVar import structlog request_id_var: ContextVar[str | None] = ContextVar("request_id", default=None) def _add_request_id(_logger, _name, event_dict): rid = request_id_var.get() if rid is not None: event_dict["request_id"] = rid return event_dict def configure_logging(level: str = "INFO") -> None: logging.basicConfig(format="%(message)s", level=getattr(logging, level.upper(), logging.INFO)) structlog.configure( processors=[ structlog.contextvars.merge_contextvars, _add_request_id, 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) ), cache_logger_on_first_use=True, ) def get_logger(name: str = "monlet"): return structlog.get_logger(name)