main.py 1.3 KB

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