|
6 | 6 |
|
7 | 7 | from collections.abc import Callable |
8 | 8 |
|
| 9 | +from fastapi.responses import StreamingResponse |
9 | 10 | from starlette.middleware.base import BaseHTTPMiddleware |
10 | 11 | from starlette.requests import Request |
11 | 12 | from starlette.responses import Response |
|
15 | 16 | from memos.context.context import RequestContext, generate_trace_id, set_request_context |
16 | 17 |
|
17 | 18 |
|
| 19 | +async def _tee_stream( |
| 20 | + original: StreamingResponse, |
| 21 | +) -> str: |
| 22 | + chunks = [] |
| 23 | + |
| 24 | + async for chunk in original.body_iterator: |
| 25 | + chunks.append(chunk) |
| 26 | + yield chunk |
| 27 | + |
| 28 | + body_str = "".join(chunks) |
| 29 | + |
| 30 | + return body_str |
| 31 | + |
| 32 | + |
18 | 33 | logger = memos.log.get_logger(__name__) |
19 | 34 |
|
20 | 35 |
|
@@ -67,21 +82,15 @@ async def dispatch(self, request: Request, call_next: Callable) -> Response: |
67 | 82 | # Process the request |
68 | 83 | response = await call_next(request) |
69 | 84 | end_time = time.time() |
70 | | - |
71 | | - try: |
72 | | - print(f"response.json(): {response}") |
73 | | - response_json = response.json() |
74 | | - except Exception as e: |
75 | | - response_json = None |
76 | | - logger.error(f"Error getting response body: {e}") |
| 85 | + content = await _tee_stream(response) |
77 | 86 |
|
78 | 87 | if response.status_code == 200: |
79 | 88 | logger.info( |
80 | | - f"Request completed: {request.url.path}, response: {response_json}, status: {response.status_code}, cost: {(end_time - start_time) * 1000:.2f}ms" |
| 89 | + f"Request completed: {request.url.path}, content: {content}, status: {response.status_code}, cost: {(end_time - start_time) * 1000:.2f}ms" |
81 | 90 | ) |
82 | 91 | else: |
83 | 92 | logger.error( |
84 | | - f"Request Failed: {request.url.path}, response: {response_json}, status: {response.status_code}, cost: {(end_time - start_time) * 1000:.2f}ms" |
| 93 | + f"Request Failed: {request.url.path}, content: {content}, status: {response.status_code}, cost: {(end_time - start_time) * 1000:.2f}ms" |
85 | 94 | ) |
86 | 95 |
|
87 | 96 | return response |
0 commit comments