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