Add OpenTelemetry tracing and log correlation

This commit is contained in:
2026-09-17 14:56:57 +03:30
parent 3445ead897
commit f7366a1985
9 changed files with 187 additions and 40 deletions
+21 -1
View File
@@ -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)}
}