Add OpenTelemetry tracing and log correlation
This commit is contained in:
@@ -1,8 +1,11 @@
|
||||
package observability
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log/slog"
|
||||
"os"
|
||||
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
)
|
||||
|
||||
// Configure installs the process-wide JSON logger used by every GL adapter.
|
||||
@@ -24,7 +27,24 @@ func Configure(service string, level slog.Leveler) *slog.Logger {
|
||||
return attr
|
||||
},
|
||||
})
|
||||
logger := slog.New(handler).With("service", service)
|
||||
logger := slog.New(&traceHandler{Handler: handler}).With("service", service)
|
||||
slog.SetDefault(logger)
|
||||
return logger
|
||||
}
|
||||
|
||||
type traceHandler struct{ slog.Handler }
|
||||
|
||||
func (h *traceHandler) Handle(ctx context.Context, record slog.Record) error {
|
||||
spanContext := trace.SpanContextFromContext(ctx)
|
||||
if spanContext.IsValid() {
|
||||
record.AddAttrs(slog.String("trace_id", spanContext.TraceID().String()), slog.String("span_id", spanContext.SpanID().String()))
|
||||
}
|
||||
return h.Handler.Handle(ctx, record)
|
||||
}
|
||||
|
||||
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)}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user