Spaces:
Running
Running
| """Structured logging with structlog — JSON in prod, pretty in dev.""" | |
| import logging | |
| import sys | |
| import structlog | |
| from src.config import settings | |
| def _configure() -> None: | |
| logging.basicConfig( | |
| format="%(message)s", | |
| stream=sys.stdout, | |
| level=settings.log_level.upper(), | |
| ) | |
| structlog.configure( | |
| processors=[ | |
| structlog.contextvars.merge_contextvars, | |
| structlog.processors.add_log_level, | |
| structlog.processors.TimeStamper(fmt="iso"), | |
| structlog.dev.ConsoleRenderer(), | |
| ], | |
| wrapper_class=structlog.make_filtering_bound_logger( | |
| logging.getLevelName(settings.log_level.upper()) | |
| ), | |
| context_class=dict, | |
| logger_factory=structlog.PrintLoggerFactory(), | |
| cache_logger_on_first_use=True, | |
| ) | |
| _configure() | |
| def get_logger(name: str) -> structlog.stdlib.BoundLogger: | |
| return structlog.get_logger(name) | |