22Request context middleware for automatic trace_id injection.
33"""
44
5+ import os
6+ import time
7+
58from collections .abc import Callable
69
710from starlette .middleware .base import BaseHTTPMiddleware
1518
1619logger = memos .log .get_logger (__name__ )
1720
21+ print ("ARMS_APP_NAME" , os .environ ["ARMS_APP_NAME" ])
22+ print ("ARMS_REGION_ID" , os .environ ["ARMS_REGION_ID" ])
23+ print ("ARMS_LICENSE_KEY" , os .environ ["ARMS_LICENSE_KEY" ])
24+
1825
1926def extract_trace_id_from_headers (request : Request ) -> str | None :
2027 """Extract trace_id from various possible headers with priority: g-trace-id > x-trace-id > trace-id."""
@@ -38,6 +45,8 @@ async def dispatch(self, request: Request, call_next: Callable) -> Response:
3845 # Extract or generate trace_id
3946 trace_id = extract_trace_id_from_headers (request ) or generate_trace_id ()
4047
48+ start_time = time .time ()
49+
4150 # Create and set request context
4251 context = RequestContext (trace_id = trace_id , api_path = request .url .path )
4352 set_request_context (context )
@@ -49,15 +58,28 @@ async def dispatch(self, request: Request, call_next: Callable) -> Response:
4958 if request .query_params :
5059 params_log ["query_params" ] = dict (request .query_params )
5160
52- logger .info (f"Request started: { request . method } { request .url . path } , { params_log } " )
61+ logger .info (f"Request started, params : { params_log } , headers: { request .headers } " )
5362
5463 # Process the request
55- response = await call_next (request )
56-
57- # Log request completion with output
58- logger .info (f"Request completed: { request .url .path } , status: { response .status_code } " )
59-
60- # Add trace_id to response headers for debugging
61- response .headers ["x-trace-id" ] = trace_id
64+ try :
65+ response = await call_next (request )
66+ end_time = time .time ()
67+ logger .info (f"response is: { response .body } " )
68+
69+ # 记录请求状态
70+ if response .status_code == 200 :
71+ logger .info (
72+ f"Request completed: { request .url .path } , status: { response .status_code } , cost: { (end_time - start_time ) * 1000 :.2f} ms"
73+ )
74+ else :
75+ logger .error (
76+ f"Request Failed: { request .url .path } , status: { response .status_code } , cost: { (end_time - start_time ) * 1000 :.2f} ms"
77+ )
78+ except Exception as e :
79+ end_time = time .time ()
80+ logger .error (
81+ f"Request Exception Error: { e } , cost: { (end_time - start_time ) * 1000 :.2f} ms"
82+ )
83+ raise e
6284
6385 return response
0 commit comments