import uvicorn import logging import os from logging.handlers import RotatingFileHandler LOG_DIR = os.path.join(os.path.dirname(__file__), "logs") os.makedirs(LOG_DIR, exist_ok=True) # Configure uvicorn to also write its own logs to the logs/ folder LOG_CONFIG = { "version": 1, "disable_existing_loggers": False, "formatters": { "default": { "format": "%(asctime)s | %(levelname)-8s | %(name)s | %(message)s", "datefmt": "%Y-%m-%d %H:%M:%S", } }, "handlers": { "console": { "class": "logging.StreamHandler", "formatter": "default", "stream": "ext://sys.stdout", }, "file": { "class": "logging.handlers.RotatingFileHandler", "formatter": "default", "filename": os.path.join(LOG_DIR, "app.log"), "maxBytes": 10 * 1024 * 1024, # 10 MB "backupCount": 5, "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}, }, } if __name__ == "__main__": uvicorn.run( "app.main:app", host="0.0.0.0", port=8000, reload=True, log_level="info", log_config=LOG_CONFIG, )