From 018ce489033adb22d822fdcb90f7749bc2d9ca8b Mon Sep 17 00:00:00 2001 From: Nick Ripley Date: Wed, 14 Sep 2022 08:57:18 -0400 Subject: [PATCH 1/3] ddtrace: make UseLogger public Make the internal UseLogger function public so that users can specify a single logger for all tracer and profiler logs. Right now the profiler doesn't have a configurable logger, and the tracer has the WithLogger option, which sets the global logger anyway. Fixes #1331. --- ddtrace/ddtrace.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ddtrace/ddtrace.go b/ddtrace/ddtrace.go index 06a1732fc1..ba93a82543 100644 --- a/ddtrace/ddtrace.go +++ b/ddtrace/ddtrace.go @@ -16,6 +16,8 @@ package ddtrace // import "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" import ( "context" "time" + + "gopkg.in/DataDog/dd-trace-go.v1/internal/log" ) // Tracer specifies an implementation of the Datadog tracer which allows starting @@ -135,3 +137,8 @@ type Logger interface { // Log prints the given message. Log(msg string) } + +// UseLogger sets l as the logger for all tracer and profiler logs. +func UseLogger(l Logger) { + log.UseLogger(l) +} From 894d3007c0445b1b5b4636ef7ccd8f9c2a1004ed Mon Sep 17 00:00:00 2001 From: Nick Ripley Date: Wed, 14 Sep 2022 09:06:05 -0400 Subject: [PATCH 2/3] internal/log: fix cyclic dependency --- ddtrace/ddtrace.go | 2 +- internal/log/log.go | 21 ++++++++++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/ddtrace/ddtrace.go b/ddtrace/ddtrace.go index ba93a82543..76b55529bc 100644 --- a/ddtrace/ddtrace.go +++ b/ddtrace/ddtrace.go @@ -132,7 +132,7 @@ type StartSpanConfig struct { Context context.Context } -// Logger implementations are able to log given messages that the tracer might output. +// Logger implementations are able to log given messages that the tracer or profiler might output. type Logger interface { // Log prints the given message. Log(msg string) diff --git a/internal/log/log.go b/internal/log/log.go index 8d68919f5e..a766475969 100644 --- a/internal/log/log.go +++ b/internal/log/log.go @@ -14,7 +14,6 @@ import ( "sync" "time" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" "gopkg.in/DataDog/dd-trace-go.v1/internal/version" ) @@ -30,15 +29,23 @@ const ( var prefixMsg = fmt.Sprintf("Datadog Tracer %s", version.Tag) +// Logger implementations are able to log given messages that the tracer might +// output. This interface is duplicated here to avoid a cyclic dependency +// between this package and ddtrace +type Logger interface { + // Log prints the given message. + Log(msg string) +} + var ( - mu sync.RWMutex // guards below fields - level = LevelWarn - logger ddtrace.Logger = &defaultLogger{l: log.New(os.Stderr, "", log.LstdFlags)} + mu sync.RWMutex // guards below fields + level = LevelWarn + logger Logger = &defaultLogger{l: log.New(os.Stderr, "", log.LstdFlags)} ) // UseLogger sets l as the active logger and returns a function to restore the // previous logger. The return value is mostly useful when testing. -func UseLogger(l ddtrace.Logger) (undo func()) { +func UseLogger(l Logger) (undo func()) { Flush() mu.Lock() defer mu.Unlock() @@ -187,7 +194,7 @@ func (p *defaultLogger) Log(msg string) { p.l.Print(msg) } // DiscardLogger discards every call to Log(). type DiscardLogger struct{} -// Log implements ddtrace.Logger. +// Log implements Logger. func (d DiscardLogger) Log(msg string) {} // RecordLogger records every call to Log() and makes it available via Logs(). @@ -196,7 +203,7 @@ type RecordLogger struct { logs []string } -// Log implements ddtrace.Logger. +// Log implements Logger. func (r *RecordLogger) Log(msg string) { r.m.Lock() defer r.m.Unlock() From c3cfe1a9ed57d6636a45ff9de559ce7f8fd3faa1 Mon Sep 17 00:00:00 2001 From: Nick Ripley Date: Wed, 14 Sep 2022 09:08:58 -0400 Subject: [PATCH 3/3] internal/log: fix cyclic dependency in test --- internal/log/log_test.go | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/internal/log/log_test.go b/internal/log/log_test.go index a870d78b49..275372f0c5 100644 --- a/internal/log/log_test.go +++ b/internal/log/log_test.go @@ -12,18 +12,16 @@ import ( "testing" "time" - "gopkg.in/DataDog/dd-trace-go.v1/ddtrace" - "github.com/stretchr/testify/assert" ) -// testLogger implements a mock ddtrace.Logger. +// testLogger implements a mock Logger. type testLogger struct { mu sync.RWMutex lines []string } -// Print implements ddtrace.Logger. +// Print implements Logger. func (tp *testLogger) Log(msg string) { tp.mu.Lock() defer tp.mu.Unlock() @@ -45,7 +43,7 @@ func (tp *testLogger) Reset() { } func TestLog(t *testing.T) { - defer func(old ddtrace.Logger) { UseLogger(old) }(logger) + defer func(old Logger) { UseLogger(old) }(logger) tp := &testLogger{} UseLogger(tp)