main.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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. try:
  25. response = await call_next(request)
  26. return response
  27. finally:
  28. duration_ms = (time.perf_counter() - start) * 1000
  29. logger.info(
  30. "[%s] HTTP %s %s -> %s (%.2f ms) client=%s",
  31. datetime.utcnow().isoformat(timespec="milliseconds") + "Z",
  32. request.method,
  33. request.url.path,
  34. getattr(response, "status_code", "N/A"),
  35. duration_ms,
  36. request.client.host if request.client else "-",
  37. )
  38. # 挂载业务路由
  39. app.include_router(router, prefix="/api/store", tags=["Store"])
  40. @app.get("/health")
  41. async def health():
  42. return {"service": "alien_store", "status": "ok"}
  43. if __name__ == "__main__":
  44. import uvicorn
  45. uvicorn.run(app, host="0.0.0.0", port=8001)