""" Uvicorn logging configuration for the Aniworld application. This configuration ensures that uvicorn logs are properly formatted and written to both console and file. """ from pathlib import Path # Get the logs directory LOGS_DIR = Path(__file__).parent.parent.parent.parent / "logs" LOGS_DIR.mkdir(parents=True, exist_ok=True) LOG_FILE = LOGS_DIR / "fastapi_app.log" LOGGING_CONFIG = { "version": 1, "disable_existing_loggers": False, "formatters": { "default": { "()": "uvicorn.logging.DefaultFormatter", "fmt": "%(levelprefix)s %(message)s", "use_colors": None, }, "access": { "()": "uvicorn.logging.AccessFormatter", "fmt": ( '%(levelprefix)s %(client_addr)s - ' '"%(request_line)s" %(status_code)s' ), }, "detailed": { "format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s", "datefmt": "%Y-%m-%d %H:%M:%S", }, }, "handlers": { "console": { "class": "logging.StreamHandler", "level": "INFO", "formatter": "default", "stream": "ext://sys.stdout", }, "file": { "class": "logging.FileHandler", "level": "INFO", "formatter": "detailed", "filename": str(LOG_FILE), "mode": "a", "encoding": "utf-8", }, }, "loggers": { "uvicorn": { "handlers": ["console", "file"], "level": "INFO", "propagate": False, }, "uvicorn.error": { "handlers": ["console", "file"], "level": "INFO", "propagate": False, }, "uvicorn.access": { "handlers": ["console", "file"], "level": "INFO", "propagate": False, }, "watchfiles.main": { "handlers": ["console"], "level": "WARNING", "propagate": False, }, "aniworld": { "handlers": ["console", "file"], "level": "INFO", "propagate": False, }, }, "root": { "handlers": ["console", "file"], "level": "INFO", }, } def get_uvicorn_log_config() -> dict: """ Get the uvicorn logging configuration dictionary. Returns: Dictionary containing logging configuration """ return LOGGING_CONFIG