New logger for the Traefik logs
This commit is contained in:
parent
27c02b5a56
commit
56f7515ecd
297 changed files with 2337 additions and 1934 deletions
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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...)
|
||||
}
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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...)
|
||||
}
|
|
@ -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]
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue