Spaces:
Running
Running
File size: 1,339 Bytes
76b9762 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
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
|