diff --git a/internal/martian/trace.go b/internal/martian/trace.go index b0510844..f31b46fa 100644 --- a/internal/martian/trace.go +++ b/internal/martian/trace.go @@ -3,9 +3,12 @@ package martian import ( + "context" "fmt" "sync/atomic" "time" + + "github.com/saucelabs/forwarder/internal/martian/log" ) // traceID is a unique identifier for a request. @@ -32,3 +35,28 @@ func (t traceID) String() string { func (t traceID) Duration() time.Duration { return time.Since(t.createdAt) } + +type TraceIDPrependingLogger struct { + log.Logger +} + +func (l TraceIDPrependingLogger) Infof(ctx context.Context, format string, args ...any) { + l.Logger.Infof(ctx, l.format(ctx, format), args...) +} + +func (l TraceIDPrependingLogger) Debugf(ctx context.Context, format string, args ...any) { + l.Logger.Debugf(ctx, l.format(ctx, format), args...) +} + +func (l TraceIDPrependingLogger) Errorf(ctx context.Context, format string, args ...any) { + l.Logger.Errorf(ctx, l.format(ctx, format), args...) +} + +var _ log.Logger = TraceIDPrependingLogger{} + +func (l TraceIDPrependingLogger) format(ctx context.Context, format string) string { + if id := TraceID(ctx); id != "" { + return fmt.Sprintf("[%s] %s", id, format) + } + return format +}