main.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import logging
  2. import time
  3. from datetime import datetime
  4. from fastapi import FastAPI, Request
  5. from fastapi.middleware.cors import CORSMiddleware
  6. from alien_store.api.router import router
  7. from alien_gateway.config import settings
  8. app = FastAPI(
  9. title=f"{settings.PROJECT_NAME} - Store Service",
  10. version="1.0.0"
  11. )
  12. app.add_middleware(
  13. CORSMiddleware,
  14. allow_origins=["*"],
  15. allow_credentials=True,
  16. allow_methods=["*"],
  17. allow_headers=["*"],
  18. )
  19. logger = logging.getLogger("alien_store")
  20. # 轻量日志中间件:仅记录方法、路径、状态码、耗时和客户端
  21. @app.middleware("http")
  22. async def log_requests(request: Request, call_next):
  23. start = time.perf_counter()
  24. response = None
  25. try:
  26. response = await call_next(request)
  27. return response
  28. finally:
  29. duration_ms = (time.perf_counter() - start) * 1000
  30. logger.info(
  31. "[%s] HTTP %s %s -> %s (%.2f ms) client=%s",
  32. datetime.utcnow().isoformat(timespec="milliseconds") + "Z",
  33. request.method,
  34. request.url.path,
  35. getattr(response, "status_code", "N/A"),
  36. duration_ms,
  37. request.client.host if request.client else "-",
  38. )
  39. # 挂载业务路由
  40. app.include_router(router, prefix="/api/store", tags=["Store"])
  41. @app.get("/health")
  42. async def health():
  43. return {"service": "alien_store", "status": "ok"}
  44. if __name__ == "__main__":
  45. import uvicorn
  46. uvicorn.run(app, host="0.0.0.0", port=8001)