| | 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() |
| | |
| | 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 |
| |
|