code: func (c *Config) Setup(componentName string) (opentracing.Tracer, io.Closer, error) {
  	jcfg := jaegercfg.Configuration{
  		Sampler: &jaegercfg.SamplerConfig{
  			SamplingServerURL: c.SamplingServerURL,
  			Type:              c.SamplingType,
  			Param:             c.SamplingParam,
  		},
  		Reporter: &jaegercfg.ReporterConfig{
  			LogSpans:           true,
  			LocalAgentHostPort: c.LocalAgentHostPort,
  		},
  		Headers: &jaeger.HeadersConfig{
  			TraceContextHeaderName: c.TraceContextHeaderName,
  		},
  	}
  
  	jMetricsFactory := jaegermet.NullFactory
  
  	opts := []jaegercfg.Option{
  		jaegercfg.Logger(newJaegerLogger()),
  		jaegercfg.Metrics(jMetricsFactory),
  		jaegercfg.Gen128Bit(c.Gen128Bit),
  	}
  
  	switch c.Propagation {
  	case "b3":
  		p := zipkin.NewZipkinB3HTTPHeaderPropagator()
  		opts = append(opts,
  			jaegercfg.Injector(opentracing.HTTPHeaders, p),
  			jaegercfg.Extractor(opentracing.HTTPHeaders, p),
  		)
  	case "jaeger", "":
  	default:
  		return nil, nil, fmt.Errorf("unknown propagation format: %s", c.Propagation)
  	}
  
  	// Initialize tracer with a logger and a metrics factory
  	closer, err := jcfg.InitGlobalTracer(
  		componentName,
  		opts...,
  	)
  	if err != nil {
  		log.WithoutContext().Warnf("Could not initialize jaeger tracer: %s", err.Error())
  		return nil, nil, err
  	}
  	log.WithoutContext().Debug("Jaeger tracer configured")
  
  	return opentracing.GlobalTracer(), closer, nil
  }
docs: // Setup sets up the tracer