New logger for the Traefik logs

This commit is contained in:
Ludovic Fernandez 2022-11-21 18:36:05 +01:00 committed by GitHub
parent 27c02b5a56
commit 56f7515ecd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
297 changed files with 2337 additions and 1934 deletions

View file

@ -7,7 +7,8 @@ import (
"strings"
"github.com/opentracing/opentracing-go"
"github.com/traefik/traefik/v2/pkg/log"
"github.com/rs/zerolog/log"
"github.com/traefik/traefik/v2/pkg/logs"
ddtracer "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer"
datadog "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
)
@ -46,6 +47,8 @@ func (c *Config) SetDefaults() {
// Setup sets up the tracer.
func (c *Config) Setup(serviceName string) (opentracing.Tracer, io.Closer, error) {
logger := log.With().Str(logs.TracingProviderName, Name).Logger()
opts := []datadog.StartOption{
datadog.WithAgentAddr(c.LocalAgentHostPort),
datadog.WithServiceName(serviceName),
@ -56,6 +59,7 @@ func (c *Config) Setup(serviceName string) (opentracing.Tracer, io.Closer, error
PriorityHeader: c.SamplingPriorityHeaderName,
BaggagePrefix: c.BagagePrefixHeaderName,
})),
datadog.WithLogger(logs.NewDatadogLogger(logger)),
}
for k, v := range c.GlobalTags {
@ -63,7 +67,7 @@ func (c *Config) Setup(serviceName string) (opentracing.Tracer, io.Closer, error
}
if c.GlobalTag != "" {
log.WithoutContext().Warn(`Datadog: option "globalTag" is deprecated, please use "globalTags" instead.`)
logger.Warn().Msg(`Datadog: option "globalTag" is deprecated, please use "globalTags" instead.`)
key, value, _ := strings.Cut(c.GlobalTag, ":")
@ -76,12 +80,13 @@ func (c *Config) Setup(serviceName string) (opentracing.Tracer, io.Closer, error
if c.PrioritySampling {
opts = append(opts, datadog.WithPrioritySampling())
}
tracer := ddtracer.New(opts...)
// Without this, child spans are getting the NOOP tracer
opentracing.SetGlobalTracer(tracer)
log.WithoutContext().Debug("Datadog tracer configured")
logger.Debug().Msg("Datadog tracer configured")
return tracer, nil, nil
}

View file

@ -5,7 +5,8 @@ import (
"net/url"
"github.com/opentracing/opentracing-go"
"github.com/traefik/traefik/v2/pkg/log"
"github.com/rs/zerolog/log"
"github.com/traefik/traefik/v2/pkg/logs"
"github.com/traefik/traefik/v2/pkg/version"
"go.elastic.co/apm"
"go.elastic.co/apm/module/apmot"
@ -59,13 +60,15 @@ func (c *Config) Setup(serviceName string) (opentracing.Tracer, io.Closer, error
return nil, nil, err
}
tracer.SetLogger(log.WithoutContext())
logger := log.With().Str(logs.TracingProviderName, Name).Logger()
tracer.SetLogger(logs.NewElasticLogger(logger))
otTracer := apmot.New(apmot.WithTracer(tracer))
// Without this, child spans are getting the NOOP tracer
opentracing.SetGlobalTracer(otTracer)
log.WithoutContext().Debug("Elastic tracer configured")
log.Debug().Msg("Elastic tracer configured")
return otTracer, nil, nil
}

View file

@ -7,7 +7,8 @@ import (
"github.com/ExpediaDotCom/haystack-client-go"
"github.com/opentracing/opentracing-go"
"github.com/traefik/traefik/v2/pkg/log"
"github.com/rs/zerolog/log"
"github.com/traefik/traefik/v2/pkg/logs"
)
// Name sets the name of this tracer.
@ -48,6 +49,8 @@ func (c *Config) Setup(serviceName string) (opentracing.Tracer, io.Closer, error
port = c.LocalAgentPort
}
logger := log.With().Str(logs.TracingProviderName, Name).Logger()
tracer, closer := haystack.NewTracer(serviceName, haystack.NewAgentDispatcher(host, port, 3*time.Second, 1000),
haystack.TracerOptionsFactory.Tag(tag[0], value),
haystack.TracerOptionsFactory.Propagator(opentracing.HTTPHeaders,
@ -57,13 +60,13 @@ func (c *Config) Setup(serviceName string) (opentracing.Tracer, io.Closer, error
SpanIDKEYName: c.SpanIDHeaderName,
BaggagePrefixKEYName: c.BaggagePrefixHeaderName,
}, haystack.DefaultCodex{})),
haystack.TracerOptionsFactory.Logger(&haystackLogger{logger: log.WithoutContext()}),
haystack.TracerOptionsFactory.Logger(logs.NewHaystackLogger(logger)),
)
// Without this, child spans are getting the NOOP tracer
opentracing.SetGlobalTracer(tracer)
log.WithoutContext().Debug("haystack tracer configured")
log.Debug().Msg("haystack tracer configured")
return tracer, closer, nil
}

View file

@ -1,24 +0,0 @@
package haystack
import (
"github.com/traefik/traefik/v2/pkg/log"
)
type haystackLogger struct {
logger log.Logger
}
// Error prints the error message.
func (l haystackLogger) Error(format string, v ...interface{}) {
l.logger.Errorf(format, v...)
}
// Info prints the info message.
func (l haystackLogger) Info(format string, v ...interface{}) {
l.logger.Infof(format, v...)
}
// Debug prints the info message.
func (l haystackLogger) Debug(format string, v ...interface{}) {
l.logger.Debugf(format, v...)
}

View file

@ -5,7 +5,8 @@ import (
instana "github.com/instana/go-sensor"
"github.com/opentracing/opentracing-go"
"github.com/traefik/traefik/v2/pkg/log"
"github.com/rs/zerolog/log"
"github.com/traefik/traefik/v2/pkg/logs"
)
// Name sets the name of this tracer.
@ -40,6 +41,9 @@ func (c *Config) Setup(serviceName string) (opentracing.Tracer, io.Closer, error
logLevel = instana.Debug
}
logger := log.With().Str(logs.TracingProviderName, Name).Logger()
instana.SetLogger(logs.NewInstanaLogger(logger))
tracer := instana.NewTracerWithOptions(&instana.Options{
Service: serviceName,
LogLevel: logLevel,
@ -51,7 +55,7 @@ func (c *Config) Setup(serviceName string) (opentracing.Tracer, io.Closer, error
// Without this, child spans are getting the NOOP tracer
opentracing.SetGlobalTracer(tracer)
log.WithoutContext().Debug("Instana tracer configured")
logger.Debug().Msg("Instana tracer configured")
return tracer, nil, nil
}

View file

@ -5,7 +5,8 @@ import (
"io"
"github.com/opentracing/opentracing-go"
"github.com/traefik/traefik/v2/pkg/log"
"github.com/rs/zerolog/log"
"github.com/traefik/traefik/v2/pkg/logs"
jaegercli "github.com/uber/jaeger-client-go"
jaegercfg "github.com/uber/jaeger-client-go/config"
"github.com/uber/jaeger-client-go/zipkin"
@ -88,8 +89,10 @@ func (c *Config) Setup(componentName string) (opentracing.Tracer, io.Closer, err
jMetricsFactory := jaegermet.NullFactory
logger := log.With().Str(logs.TracingProviderName, Name).Logger()
opts := []jaegercfg.Option{
jaegercfg.Logger(newJaegerLogger()),
jaegercfg.Logger(logs.NewJaegerLogger(logger)),
jaegercfg.Metrics(jMetricsFactory),
jaegercfg.Gen128Bit(c.Gen128Bit),
}
@ -112,10 +115,10 @@ func (c *Config) Setup(componentName string) (opentracing.Tracer, io.Closer, err
opts...,
)
if err != nil {
log.WithoutContext().Warnf("Could not initialize jaeger tracer: %v", err)
logger.Warn().Err(err).Msg("Could not initialize jaeger tracer")
return nil, nil, err
}
log.WithoutContext().Debug("Jaeger tracer configured")
logger.Debug().Msg("Jaeger tracer configured")
return opentracing.GlobalTracer(), closer, nil
}

View file

@ -1,26 +0,0 @@
package jaeger
import (
"github.com/sirupsen/logrus"
"github.com/traefik/traefik/v2/pkg/log"
)
// jaegerLogger is an implementation of the Logger interface that delegates to traefik log.
type jaegerLogger struct {
logger logrus.FieldLogger
}
func newJaegerLogger() *jaegerLogger {
return &jaegerLogger{
logger: log.WithoutContext().WithField(log.TracingProviderName, "jaeger"),
}
}
func (l *jaegerLogger) Error(msg string) {
l.logger.Errorf("Tracing jaeger error: %s", msg)
}
// Infof logs a message at debug priority.
func (l *jaegerLogger) Infof(msg string, args ...interface{}) {
l.logger.Debugf(msg, args...)
}

View file

@ -5,7 +5,7 @@ import (
"fmt"
"strings"
"github.com/traefik/traefik/v2/pkg/log"
"github.com/rs/zerolog/log"
)
// TraceNameHashLength defines the number of characters to use from the head of the generated hash.
@ -22,7 +22,7 @@ func generateOperationName(prefix string, parts []string, sep string, spanLimit
if spanLimit > 0 && len(name) > spanLimit {
if spanLimit < maxLength {
log.WithoutContext().Warnf("SpanNameLimit cannot be lesser than %d: falling back on %d, maxLength, maxLength+3", maxLength)
log.Warn().Msgf("SpanNameLimit cannot be lesser than %d: falling back on %d", maxLength, maxLength+3)
spanLimit = maxLength + 3
}
@ -58,7 +58,7 @@ func computeHash(name string) string {
hash := sha256.New()
if _, err := hash.Write(data); err != nil {
// Impossible case
log.WithoutContext().WithField("OperationName", name).Errorf("Failed to create Span name hash for %s: %v", name, err)
log.Error().Str("OperationName", name).Err(err).Msgf("Failed to create Span name hash for %s", name)
}
return fmt.Sprintf("%x", hash.Sum(nil))[:TraceNameHashLength]

View file

@ -9,7 +9,7 @@ import (
"github.com/opentracing/opentracing-go"
"github.com/opentracing/opentracing-go/ext"
"github.com/traefik/traefik/v2/pkg/log"
"github.com/rs/zerolog/log"
)
type contextKey int
@ -99,7 +99,7 @@ func (t *Tracing) Close() {
if t.closer != nil {
err := t.closer.Close()
if err != nil {
log.WithoutContext().Warn(err)
log.Warn().Err(err).Send()
}
}
}
@ -136,7 +136,7 @@ func InjectRequestHeaders(r *http.Request) {
opentracing.HTTPHeaders,
opentracing.HTTPHeadersCarrier(r.Header))
if err != nil {
log.FromContext(r.Context()).Error(err)
log.Ctx(r.Context()).Error().Err(err).Send()
}
}
}

View file

@ -8,7 +8,7 @@ import (
zipkinot "github.com/openzipkin-contrib/zipkin-go-opentracing"
"github.com/openzipkin/zipkin-go"
"github.com/openzipkin/zipkin-go/reporter/http"
"github.com/traefik/traefik/v2/pkg/log"
"github.com/rs/zerolog/log"
)
// Name sets the name of this tracer.
@ -65,7 +65,7 @@ func (c *Config) Setup(serviceName string) (opentracing.Tracer, io.Closer, error
// Without this, child spans are getting the NOOP tracer
opentracing.SetGlobalTracer(tracer)
log.WithoutContext().Debug("Zipkin tracer configured")
log.Debug().Msg("Zipkin tracer configured")
return tracer, reporter, nil
}