Files

33 lines
698 B
Go

package telemetry
import (
"context"
"log/slog"
"go.opentelemetry.io/otel/trace"
)
type TraceHandler struct {
slog.Handler
}
func (h *TraceHandler) Handle(ctx context.Context, r slog.Record) error {
spanCtx := trace.SpanContextFromContext(ctx)
if spanCtx.HasTraceID() {
r.AddAttrs(
slog.String("trace_id", spanCtx.TraceID().String()),
slog.String("span_id", spanCtx.SpanID().String()),
)
}
return h.Handler.Handle(ctx, r)
}
func (h *TraceHandler) WithAttrs(attrs []slog.Attr) slog.Handler {
return &TraceHandler{Handler: h.Handler.WithAttrs(attrs)}
}
func (h *TraceHandler) WithGroup(name string) slog.Handler {
return &TraceHandler{Handler: h.Handler.WithGroup(name)}
}