tracer_provider.go raw

   1  // Copyright The OpenTelemetry Authors
   2  // SPDX-License-Identifier: Apache-2.0
   3  
   4  package sdk
   5  
   6  import (
   7  	"go.opentelemetry.io/otel/trace"
   8  	"go.opentelemetry.io/otel/trace/noop"
   9  )
  10  
  11  // TracerProvider returns an auto-instrumentable [trace.TracerProvider].
  12  //
  13  // If an [go.opentelemetry.io/auto.Instrumentation] is configured to instrument
  14  // the process using the returned TracerProvider, all of the telemetry it
  15  // produces will be processed and handled by that Instrumentation. By default,
  16  // if no Instrumentation instruments the TracerProvider it will not generate
  17  // any trace telemetry.
  18  func TracerProvider() trace.TracerProvider { return tracerProviderInstance }
  19  
  20  var tracerProviderInstance = new(tracerProvider)
  21  
  22  type tracerProvider struct{ noop.TracerProvider }
  23  
  24  var _ trace.TracerProvider = tracerProvider{}
  25  
  26  func (p tracerProvider) Tracer(name string, opts ...trace.TracerOption) trace.Tracer {
  27  	cfg := trace.NewTracerConfig(opts...)
  28  	return tracer{
  29  		name:      name,
  30  		version:   cfg.InstrumentationVersion(),
  31  		schemaURL: cfg.SchemaURL(),
  32  	}
  33  }
  34