diff --git a/backend/internal/trace/context.go b/backend/internal/trace/context.go new file mode 100644 index 0000000..e023a7a --- /dev/null +++ b/backend/internal/trace/context.go @@ -0,0 +1,46 @@ +package trace + +import "context" + +type traceIDKey struct{} +type requestIDKey struct{} +type sessionIDKey struct{} + +// WithTraceID 将 trace ID 注入 context(连接级/会话级标识) +func WithTraceID(ctx context.Context, traceID string) context.Context { + return context.WithValue(ctx, traceIDKey{}, traceID) +} + +// GetTraceID 从 context 提取 trace ID +func GetTraceID(ctx context.Context) string { + if v, ok := ctx.Value(traceIDKey{}).(string); ok { + return v + } + return "" +} + +// WithRequestID 将 request ID 注入 context(单次请求/查询标识) +func WithRequestID(ctx context.Context, requestID string) context.Context { + return context.WithValue(ctx, requestIDKey{}, requestID) +} + +// GetRequestID 从 context 提取 request ID +func GetRequestID(ctx context.Context) string { + if v, ok := ctx.Value(requestIDKey{}).(string); ok { + return v + } + return "" +} + +// WithSessionID 将 session ID 注入 context(会话存储标识) +func WithSessionID(ctx context.Context, sessionID string) context.Context { + return context.WithValue(ctx, sessionIDKey{}, sessionID) +} + +// GetSessionID 从 context 提取 session ID +func GetSessionID(ctx context.Context) string { + if v, ok := ctx.Value(sessionIDKey{}).(string); ok { + return v + } + return "" +}