"""structlog 结构化日志(ARCH §9.3)。dev 走彩色 console,其余 JSON。""" from __future__ import annotations import logging import structlog from structlog.typing import Processor from ww_config import get_settings def configure_logging() -> None: settings = get_settings() shared: list[Processor] = [ structlog.contextvars.merge_contextvars, structlog.processors.add_log_level, structlog.processors.TimeStamper(fmt="iso"), ] renderer = ( structlog.processors.JSONRenderer() if settings.log_json else structlog.dev.ConsoleRenderer() ) processors: list[Processor] = [*shared, renderer] structlog.configure( processors=processors, wrapper_class=structlog.make_filtering_bound_logger(logging.INFO), cache_logger_on_first_use=True, ) def get_logger(name: str = "ww") -> structlog.stdlib.BoundLogger: logger: structlog.stdlib.BoundLogger = structlog.get_logger(name) return logger