Spaces:
Running
Running
import json | |
from fastapi import Request | |
from starlette.middleware.base import BaseHTTPMiddleware | |
from app.log.logger import get_request_logger | |
logger = get_request_logger() | |
# 添加中间件类 | |
class RequestLoggingMiddleware(BaseHTTPMiddleware): | |
async def dispatch(self, request: Request, call_next): | |
# 记录请求路径 | |
logger.info(f"Request path: {request.url.path}") | |
# 获取并记录请求体 | |
try: | |
body = await request.body() | |
if body: | |
body_str = body.decode() | |
# 尝试格式化JSON | |
try: | |
formatted_body = json.loads(body_str) | |
logger.info( | |
f"Formatted request body:\n{json.dumps(formatted_body, indent=2, ensure_ascii=False)}" | |
) | |
except json.JSONDecodeError: | |
logger.error("Request body is not valid JSON.") | |
except Exception as e: | |
logger.error(f"Error reading request body: {str(e)}") | |
# 重置请求的接收器,以便后续处理器可以继续读取请求体 | |
async def receive(): | |
return {"type": "http.request", "body": body, "more_body": False} | |
request._receive = receive | |
response = await call_next(request) | |
return response | |