""" HTTP 中间件:request_id 注入。 """ import uuid from starlette.middleware.base import BaseHTTPMiddleware from starlette.requests import Request from app.core.logging import logger class RequestIdMiddleware(BaseHTTPMiddleware): """Inject request_id into request.state and response headers, bind to loguru context.""" async def dispatch(self, request: Request, call_next): request_id = request.headers.get("X-Request-ID") or str(uuid.uuid4()) request.state.request_id = request_id with logger.contextualize(request_id=request_id): response = await call_next(request) response.headers["X-Request-ID"] = request_id return response