from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from contextlib import asynccontextmanager from app.config import settings from app.database import init_db from app.redis_lock import redis_manager from app.routes import router from app.logger import get_logger, LoggerManager # 初始化日志系统 LoggerManager.setup_logging() logger = get_logger("main") @asynccontextmanager async def lifespan(app: FastAPI): # 启动时初始化 logger.info("🚀 应用启动中...") try: # 初始化数据库 logger.info("📊 初始化数据库连接...") await init_db() logger.info("✅ 数据库连接成功") # 初始化Redis logger.info("🔴 初始化Redis连接...") await redis_manager.connect() logger.info("✅ Redis连接成功") logger.info(f"🎉 {settings.app_name} 启动完成!") yield except Exception as e: logger.error(f"❌ 应用启动失败: {e}") raise finally: # 关闭时清理 logger.info("🛑 应用关闭中...") try: await redis_manager.disconnect() logger.info("✅ Redis连接已关闭") except Exception as e: logger.error(f"❌ Redis关闭时出错: {e}") logger.info("👋 应用已关闭") app = FastAPI( title=settings.app_name, version="1.0.0", lifespan=lifespan ) # 添加CORS中间件 app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # 注册路由 app.include_router(router) @app.get("/") async def root(): logger.info("📝 根接口被访问") return {"message": f"Welcome to {settings.app_name}"} @app.get("/health") async def health_check(): logger.debug("💓 健康检查接口被访问") return {"status": "healthy"} if __name__ == "__main__": import uvicorn uvicorn.run( "main:app", host="0.0.0.0", port=8000, reload=settings.debug )