diff --git a/middleware/tracing/tracer.go b/middleware/tracing/tracer.go index b4455309f..67f1a2d95 100644 --- a/middleware/tracing/tracer.go +++ b/middleware/tracing/tracer.go @@ -30,15 +30,15 @@ func NewTracer(kind trace.SpanKind, opts ...Option) *Tracer { for _, o := range opts { o(&op) } - if op.tracerProvider != nil { - otel.SetTracerProvider(op.tracerProvider) + if op.tracerProvider == nil { + op.tracerProvider = otel.GetTracerProvider() } switch kind { case trace.SpanKindClient: - return &Tracer{tracer: otel.Tracer(op.tracerName), kind: kind, opt: &op} + return &Tracer{tracer: op.tracerProvider.Tracer(op.tracerName), kind: kind, opt: &op} case trace.SpanKindServer: - return &Tracer{tracer: otel.Tracer(op.tracerName), kind: kind, opt: &op} + return &Tracer{tracer: op.tracerProvider.Tracer(op.tracerName), kind: kind, opt: &op} default: panic(fmt.Sprintf("unsupported span kind: %v", kind)) } diff --git a/middleware/tracing/tracing.go b/middleware/tracing/tracing.go index b89ce0a22..7d9b53a1b 100644 --- a/middleware/tracing/tracing.go +++ b/middleware/tracing/tracing.go @@ -29,7 +29,7 @@ func WithPropagator(propagator propagation.TextMapPropagator) Option { } // WithTracerProvider with tracer provider. -// Deprecated: use otel.SetTracerProvider(provider) instead. +// By default, it uses the global provider that is set by otel.SetTracerProvider(provider). func WithTracerProvider(provider trace.TracerProvider) Option { return func(opts *options) { opts.tracerProvider = provider