SPB Git forge

spb/uqo-chat

Public
14commits 1branches 0releases
1.4 MBsize
maindefault branch
17 days agolast push
Python 64.6% TypeScript 33.7% CSS 0.8%
1.3 KB · 40 lines python
Raw Blame History
1"""structlog configuration. Never log message contents (Loi 25)."""23from __future__ import annotations45import logging6import sys78import structlog910REDACT_KEYS = {"content", "message", "text", "code", "prompt", "email", "authorization"}111213def _redact(_: object, __: str, event_dict: dict) -> dict:14    for key in list(event_dict):15        if key.lower() in REDACT_KEYS:16            value = event_dict[key]17            event_dict[key] = f"<redacted len={len(str(value))}>"18    return event_dict192021def configure_logging(level: str = "INFO", json_output: bool = True) -> None:22    logging.basicConfig(level=level, stream=sys.stdout, format="%(message)s")23    renderer = structlog.processors.JSONRenderer() if json_output else structlog.dev.ConsoleRenderer()24    structlog.configure(25        processors=[26            structlog.contextvars.merge_contextvars,27            structlog.processors.add_log_level,28            structlog.processors.TimeStamper(fmt="iso"),29            _redact,30            renderer,31        ],32        wrapper_class=structlog.make_filtering_bound_logger(getattr(logging, level.upper(), 20)),33        logger_factory=structlog.PrintLoggerFactory(),34        cache_logger_on_first_use=True,35    )363738def get_logger(name: str) -> structlog.stdlib.BoundLogger:39    return structlog.get_logger(name)40