(t *testing.T)
| 265 | } |
| 266 | |
| 267 | func TestOTelSpanLoggerAwareCaller(t *testing.T) { |
| 268 | testCases := map[string]func(w io.Writer) log.Logger{ |
| 269 | // This is based on Mimir's default logging configuration: https://github.com/grafana/mimir/blob/50d1c27b4ad82b265ff5a865345bec2d726f64ef/pkg/util/log/log.go#L45-L46 |
| 270 | "default logger": func(w io.Writer) log.Logger { |
| 271 | logger := dskit_log.NewGoKitWithWriter("logfmt", w) |
| 272 | logger = log.With(logger, "ts", log.DefaultTimestampUTC, "caller", Caller(5)) |
| 273 | logger = level.NewFilter(logger, level.AllowAll()) |
| 274 | return logger |
| 275 | }, |
| 276 | |
| 277 | //This is based on Mimir's logging configuration with rate-limiting enabled: https://github.com/grafana/mimir/blob/50d1c27b4ad82b265ff5a865345bec2d726f64ef/pkg/util/log/log.go#L42-L43 |
| 278 | "rate-limited logger": func(w io.Writer) log.Logger { |
| 279 | logger := dskit_log.NewGoKitWithWriter("logfmt", w) |
| 280 | logger = log.With(logger, "ts", log.DefaultTimestampUTC, "caller", Caller(6)) |
| 281 | logger = dskit_log.NewRateLimitedLogger(logger, 1000, 1000, nil) |
| 282 | logger = level.NewFilter(logger, level.AllowAll()) |
| 283 | return logger |
| 284 | }, |
| 285 | |
| 286 | "default logger that has been wrapped with further information": func(w io.Writer) log.Logger { |
| 287 | logger := dskit_log.NewGoKitWithWriter("logfmt", w) |
| 288 | logger = log.With(logger, "ts", log.DefaultTimestampUTC, "caller", Caller(5)) |
| 289 | logger = level.NewFilter(logger, level.AllowAll()) |
| 290 | logger = log.With(logger, "user", "user-1") |
| 291 | return logger |
| 292 | }, |
| 293 | } |
| 294 | |
| 295 | resolver := tenant.NewMultiResolver() |
| 296 | |
| 297 | setupTest := func(t *testing.T, loggerFactory func(io.Writer) log.Logger) (*bytes.Buffer, *SpanLogger) { |
| 298 | t.Cleanup(spanExporter.Reset) |
| 299 | |
| 300 | ctx, _ := tracer.Start(context.Background(), "test") |
| 301 | |
| 302 | buf := bytes.NewBuffer(nil) |
| 303 | logger := loggerFactory(buf) |
| 304 | spanLogger := FromContext(ctx, logger, resolver) |
| 305 | require.NotNil(t, spanLogger.otelSpan) |
| 306 | require.Nil(t, spanLogger.opentracingSpan) |
| 307 | |
| 308 | return buf, spanLogger |
| 309 | } |
| 310 | |
| 311 | requireSpanHasTwoLogLinesWithoutCaller := func(t *testing.T, span tracetest.SpanStub, extraAttributes ...attribute.KeyValue) { |
| 312 | evs := span.Events |
| 313 | require.Len(t, evs, 2) |
| 314 | |
| 315 | require.Equal(t, "log", evs[0].Name) |
| 316 | require.Equal(t, "log", evs[1].Name) |
| 317 | require.Equal(t, append(slices.Clone(extraAttributes), attribute.String("msg", "this is a test")), evs[0].Attributes) |
| 318 | require.Equal(t, append(slices.Clone(extraAttributes), attribute.String("msg", "this is another test")), evs[1].Attributes) |
| 319 | } |
| 320 | |
| 321 | toCallerInfo := func(path string, lineNumber int) string { |
| 322 | fileName := filepath.Base(path) |
| 323 | return fmt.Sprintf("%s:%v", fileName, lineNumber) |
| 324 | } |
nothing calls this directly
no test coverage detected