| import time | |
| from fastapi import Request | |
| from starlette.middleware.base import BaseHTTPMiddleware | |
| from voice_dialogue.utils.logger import logger | |
| class LoggingMiddleware(BaseHTTPMiddleware): | |
| """请求日志中间件""" | |
| async def dispatch(self, request: Request, call_next): | |
| start_time = time.time() | |
| # 记录请求信息 | |
| logger.info( | |
| f"请求开始: {request.method} {request.url.path} " | |
| f"客户端: {request.client.host if request.client else 'unknown'}" | |
| ) | |
| # 处理请求 | |
| response = await call_next(request) | |
| # 计算处理时间 | |
| process_time = time.time() - start_time | |
| # 记录响应信息 | |
| logger.info( | |
| f"请求完成: {request.method} {request.url.path} " | |
| f"状态码: {response.status_code} " | |
| f"处理时间: {process_time:.3f}s" | |
| ) | |
| # 添加处理时间到响应头 | |
| response.headers["X-Process-Time"] = str(process_time) | |
| return response | |