Spaces:
Sleeping
Sleeping
| 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() | |