import logging from logging.config import dictConfig from app.core.config import Settings def configure_logging(settings: Settings) -> None: formatter = "json" if settings.is_production else "console" dictConfig( { "version": 1, "disable_existing_loggers": False, "formatters": { "console": { "format": "%(asctime)s %(levelname)-8s %(name)s %(message)s", }, "json": { "()": "pythonjsonlogger.json.JsonFormatter", "format": "%(asctime)s %(levelname)s %(name)s %(message)s", }, }, "handlers": { "default": { "class": "logging.StreamHandler", "formatter": formatter, "stream": "ext://sys.stdout", }, }, "root": {"handlers": ["default"], "level": settings.log_level}, "loggers": { "uvicorn": { "handlers": ["default"], "level": settings.log_level, "propagate": False, }, "uvicorn.access": { "handlers": ["default"], "level": settings.log_level, "propagate": False, }, "sqlalchemy.engine": {"level": "WARNING"}, }, } ) def get_logger(name: str) -> logging.Logger: return logging.getLogger(name)