feat: 实现日志追踪链路 #185
46
backend/internal/trace/context.go
Normal file
46
backend/internal/trace/context.go
Normal file
@@ -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 ""
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user