diff --git a/tracing/env_injector.go b/tracing/env_injector.go index 30d39a1b7de034b0b29215090966f8218e7fe2f7..5ce12af6850a241dacfc52e2fa057ed72a1f4902 100644 --- a/tracing/env_injector.go +++ b/tracing/env_injector.go @@ -3,7 +3,6 @@ package tracing import ( "context" "fmt" - "log" "os" "sort" @@ -22,7 +21,7 @@ type EnvInjector func(ctx context.Context, env []string) []string // NewEnvInjector will create a new environment injector func NewEnvInjector(opts ...EnvInjectorOption) EnvInjector { - /* config not yet used */ applyEnvInjectorOptions(opts) + conf := applyEnvInjectorOptions(opts) return func(ctx context.Context, env []string) []string { envMap := map[string]string{} @@ -50,7 +49,7 @@ func NewEnvInjector(opts ...EnvInjectorOption) EnvInjector { err := span.Tracer().Inject(span.Context(), opentracing.TextMap, carrier) if err != nil { - log.Printf("tracing span injection failed: %v", err) + conf.log.Printf("tracing span injection failed: %v", err) } return appendMapToEnv(env, envMap) diff --git a/tracing/env_injector_option.go b/tracing/env_injector_option.go index e3298a4ee182a6842477486b64d168e0bf07dcbf..ec56dcab3c9cc280d799d3eebb68cc7e4f015059 100644 --- a/tracing/env_injector_option.go +++ b/tracing/env_injector_option.go @@ -1,15 +1,28 @@ package tracing -type envInjectorConfig struct{} +import ( + "log" + "os" +) + +type envInjectorConfig struct { + log Logger +} // EnvInjectorOption will configure an environment injector type EnvInjectorOption func(*envInjectorConfig) func applyEnvInjectorOptions(opts []EnvInjectorOption) envInjectorConfig { - config := envInjectorConfig{} + config := envInjectorConfig{log: log.New(os.Stdout, "", log.LstdFlags)} for _, v := range opts { v(&config) } return config } + +func WithEnvLogger(logger Logger) EnvInjectorOption { + return func(config *envInjectorConfig) { + config.log = logger + } +} diff --git a/tracing/initialization.go b/tracing/initialization.go index d0ec3ba0f30e69ea985064de74f750ba9f86919a..43ec803b2856565cf83bb1fd672f84f9485523f6 100644 --- a/tracing/initialization.go +++ b/tracing/initialization.go @@ -2,7 +2,6 @@ package tracing import ( "io" - "log" opentracing "github.com/opentracing/opentracing-go" "gitlab.com/gitlab-org/labkit/tracing/connstr" @@ -23,6 +22,8 @@ func Initialize(opts ...InitializationOption) io.Closer { return &nopCloser{} } + log := config.log + driverName, options, err := connstr.Parse(config.connectionString) if err != nil { log.Printf("unable to parse connection: %v", err) diff --git a/tracing/initialization_options.go b/tracing/initialization_options.go index cfb4996dcac0234a9ea9f30e2d3a779068ada005..187b051d911eb2ac224451f2ccf3be1c50126f54 100644 --- a/tracing/initialization_options.go +++ b/tracing/initialization_options.go @@ -1,6 +1,7 @@ package tracing import ( + "log" "os" "path" ) @@ -11,6 +12,7 @@ const tracingEnvKey = "GITLAB_TRACING" type initializationConfig struct { serviceName string connectionString string + log Logger } // InitializationOption will configure a correlation handler @@ -20,6 +22,7 @@ func applyInitializationOptions(opts []InitializationOption) initializationConfi config := initializationConfig{ serviceName: path.Base(os.Args[0]), connectionString: os.Getenv(tracingEnvKey), + log: log.New(os.Stdout, "", log.LstdFlags), } for _, v := range opts { v(&config) @@ -43,3 +46,16 @@ func WithConnectionString(connectionString string) InitializationOption { config.connectionString = connectionString } } + +// The logger interface allows for customization of the logger with formatting +type Logger interface { + Printf(format string, args ...interface{}) +} + +// WithInitLogger overrides the default logger and uses the any logger that implements +// the Logger interface of this package +func WithInitLogger(logger Logger) InitializationOption { + return func(config *initializationConfig) { + config.log = logger + } +} diff --git a/tracing/initialization_options_test.go b/tracing/initialization_options_test.go new file mode 100644 index 0000000000000000000000000000000000000000..fa58b165922731d4293d2cc3cfa29554903827cd --- /dev/null +++ b/tracing/initialization_options_test.go @@ -0,0 +1,21 @@ +package tracing + +import ( + "bytes" + "log" + "testing" +) + +func TestCustomLogger(t *testing.T) { + var buf bytes.Buffer + cLog := log.New(&buf, "", 0) + + conf := applyInitializationOptions([]InitializationOption{WithLogger(cLog)}) + + message := "mepmep" + conf.log.Printf(message) + + if buf.String() != message+"\n" { + t.Fatalf("custom logger did not log %s", message) + } +}