diff --git a/go.mod b/go.mod index 656a549a..3cee4f9b 100644 --- a/go.mod +++ b/go.mod @@ -49,6 +49,7 @@ require ( github.com/valyala/fasttemplate v1.2.2 go.etcd.io/bbolt v1.3.7 go.etcd.io/etcd/client/v3 v3.5.9 + go.opentelemetry.io/otel/trace v1.26.0 go.uber.org/atomic v1.10.0 golang.org/x/crypto v0.24.0 golang.org/x/exp v0.0.0-20230811145659-89c5cff77bcb @@ -142,7 +143,6 @@ require ( go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect go.opentelemetry.io/otel v1.26.0 // indirect go.opentelemetry.io/otel/metric v1.26.0 // indirect - go.opentelemetry.io/otel/trace v1.26.0 // indirect go.uber.org/multierr v1.6.0 // indirect go.uber.org/zap v1.17.0 // indirect golang.org/x/mod v0.17.0 // indirect diff --git a/log/impl.log.go b/log/impl.log.go index 66c4001b..02cf3bc2 100644 --- a/log/impl.log.go +++ b/log/impl.log.go @@ -8,9 +8,16 @@ import ( "github.com/pubgo/funk/errors" "github.com/pubgo/funk/stack" "github.com/rs/zerolog" + "go.opentelemetry.io/otel/trace" "google.golang.org/protobuf/encoding/prototext" ) +const ( + traceIDKey = "trace_id" + spanIDKey = "span_id" + traceFlagsKey = "trace_flags" +) + var _ Logger = (*loggerImpl)(nil) type loggerImpl struct { @@ -142,7 +149,7 @@ func (l *loggerImpl) Err(err error, ctxL ...context.Context) *zerolog.Event { return nil } - var fn = func(e *zerolog.Event) { + fn := func(e *zerolog.Event) { if id := errors.GetErrorId(err); id != "" { e.Str("error_id", id) } @@ -212,7 +219,7 @@ func (l *loggerImpl) newEvent(ctx context.Context, e *zerolog.Event) *zerolog.Ev e = e.CallerSkipFrame(l.callerSkip) } - if l.fields != nil && len(l.fields) > 0 { + if len(l.fields) > 0 { e = e.Fields(l.fields) } @@ -221,5 +228,13 @@ func (l *loggerImpl) newEvent(ctx context.Context, e *zerolog.Event) *zerolog.Ev e = e.Ctx(ctx) } + span := trace.SpanFromContext(e.GetCtx()) + spanCtx := span.SpanContext() + if spanCtx.IsValid() { + e.Str(spanIDKey, spanCtx.SpanID().String()) + e.Str(traceIDKey, spanCtx.TraceID().String()) + e.Str(traceFlagsKey, spanCtx.TraceFlags().String()) + } + return mergeEvent(e, getEventFromCtx(ctx), l.content) }