@@ -16,9 +16,10 @@ import (
16
16
"go.opentelemetry.io/otel"
17
17
"go.opentelemetry.io/otel/attribute"
18
18
"go.opentelemetry.io/otel/log"
19
+ "go.opentelemetry.io/otel/metric"
19
20
"go.opentelemetry.io/otel/sdk"
20
21
"go.opentelemetry.io/otel/sdk/instrumentation"
21
- "go.opentelemetry.io/otel/sdk/metric"
22
+ sdkmetric "go.opentelemetry.io/otel/sdk/metric"
22
23
"go.opentelemetry.io/otel/sdk/metric/metricdata"
23
24
"go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest"
24
25
"go.opentelemetry.io/otel/sdk/resource"
@@ -383,9 +384,11 @@ func TestLoggerSelfObservability(t *testing.T) {
383
384
t .Run (tc .name , func (t * testing.T ) {
384
385
t .Setenv ("OTEL_GO_X_SELF_OBSERVABILITY" , strconv .FormatBool (tc .selfObservabilityEnabled ))
385
386
prev := otel .GetMeterProvider ()
386
- defer otel .SetMeterProvider (prev )
387
- r := metric .NewManualReader ()
388
- mp := metric .NewMeterProvider (metric .WithReader (r ))
387
+ t .Cleanup (func () {
388
+ otel .SetMeterProvider (prev )
389
+ })
390
+ r := sdkmetric .NewManualReader ()
391
+ mp := sdkmetric .NewMeterProvider (sdkmetric .WithReader (r ))
389
392
otel .SetMeterProvider (mp )
390
393
l := newLogger (NewLoggerProvider (), instrumentation.Scope {})
391
394
@@ -422,3 +425,48 @@ func TestLoggerSelfObservability(t *testing.T) {
422
425
})
423
426
}
424
427
}
428
+
429
+ func TestNewLoggerSelfObservabilityErrorHandled (t * testing.T ) {
430
+ errHandler := otel .GetErrorHandler ()
431
+ t .Cleanup (func () {
432
+ otel .SetErrorHandler (errHandler )
433
+ })
434
+
435
+ var errs []error
436
+ eh := otel .ErrorHandlerFunc (func (e error ) { errs = append (errs , e ) })
437
+ otel .SetErrorHandler (eh )
438
+
439
+ orig := otel .GetMeterProvider ()
440
+ t .Cleanup (func () { otel .SetMeterProvider (orig ) })
441
+ otel .SetMeterProvider (& errMeterProvider {err : assert .AnError })
442
+
443
+ t .Setenv ("OTEL_GO_X_SELF_OBSERVABILITY" , "true" )
444
+ l := newLogger (NewLoggerProvider (), instrumentation.Scope {})
445
+ _ = l
446
+ require .Len (t , errs , 1 )
447
+ assert .ErrorIs (t , errs [0 ], assert .AnError )
448
+ }
449
+
450
+ type errMeterProvider struct {
451
+ metric.MeterProvider
452
+
453
+ err error
454
+ }
455
+
456
+ func (mp * errMeterProvider ) Meter (string , ... metric.MeterOption ) metric.Meter {
457
+ return & errMeter {err : mp .err }
458
+ }
459
+
460
+ type errMeter struct {
461
+ metric.Meter
462
+
463
+ err error
464
+ }
465
+
466
+ func (m * errMeter ) Int64Counter (string , ... metric.Int64CounterOption ) (metric.Int64Counter , error ) {
467
+ return nil , m .err
468
+ }
469
+
470
+ func (m * errMeter ) Int64UpDownCounter (string , ... metric.Int64UpDownCounterOption ) (metric.Int64UpDownCounter , error ) {
471
+ return nil , m .err
472
+ }
0 commit comments