Spaces:
Sleeping
Sleeping
File size: 925 Bytes
551658a | 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 | from fastapi import Request, Response
from starlette.middleware.base import BaseHTTPMiddleware
import uuid
from contextvars import ContextVar
# 创建一个上下文变量来存储 trace_id
trace_id_var = ContextVar('trace_id', default=None)
class TraceMiddleware(BaseHTTPMiddleware):
async def dispatch(self, request: Request, call_next) -> Response:
# 生成唯一的 trace_id
trace_id = str(uuid.uuid4())
# 设置上下文变量
token = trace_id_var.set(trace_id)
try:
# 处理请求
response = await call_next(request)
# 将 trace_id 添加到响应头中
response.headers['X-Trace-ID'] = trace_id
return response
finally:
# 清理上下文变量
trace_id_var.reset(token)
def get_trace_id():
"""获取当前请求的 trace_id"""
return trace_id_var.get()
|