Source code for app.core.logging

"""
Structured logging setup using structlog.
Outputs JSON in production, colored console in development.
"""
import logging
import sys
import structlog
from app.config import get_settings


[docs] def setup_logging() -> None: settings = get_settings() log_level = getattr(logging, settings.log_level.upper(), logging.INFO) # Configure stdlib logging basicConfig first so handlers are set up logging.basicConfig( format="%(message)s", stream=sys.stdout, level=log_level, ) shared_processors = [ structlog.stdlib.filter_by_level, structlog.stdlib.add_logger_name, structlog.stdlib.add_log_level, structlog.processors.TimeStamper(fmt="iso"), structlog.processors.StackInfoRenderer(), structlog.processors.format_exc_info, ] if settings.is_development: # Pretty console output for local dev processors = shared_processors + [ structlog.dev.ConsoleRenderer(colors=True), ] else: # JSON output for production log aggregators (Datadog, CloudWatch, etc.) processors = shared_processors + [ structlog.processors.dict_tracebacks, structlog.processors.JSONRenderer(), ] structlog.configure( processors=processors, logger_factory=structlog.stdlib.LoggerFactory(), wrapper_class=structlog.stdlib.BoundLogger, cache_logger_on_first_use=True, )
[docs] def get_logger(name: str = __name__) -> structlog.BoundLogger: return structlog.get_logger(name)