Files
Aniworld/src/infrastructure/logging/uvicorn_config.py
2025-10-25 17:54:18 +02:00

93 lines
2.4 KiB
Python

"""
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