"""中间件定义""" import time import logging from fastapi import Request from starlette.middleware.base import BaseHTTPMiddleware logger = logging.getLogger(__name__) class RequestLoggingMiddleware(BaseHTTPMiddleware): """请求日志中间件""" async def dispatch(self, request: Request, call_next): start_time = time.time() response = await call_next(request) process_time = time.time() - start_time logger.info( f"{request.method} {request.url.path} " f"- Status: {response.status_code} " f"- Time: {process_time:.3f}s" ) response.headers["X-Process-Time"] = str(process_time) return response