Skip to content

Commit 9818ea8

Browse files
yumosxMrAlias
andauthored
refactor(logger): Flatten logger.initSelfObservability into logger.newLoggerr and use t.Cleanup instead of defer (#7228)
- Flatten `logger.initSelfObservability` into `logger.newLoggerr` - use `t.Cleanup` instead of `defer` --------- Co-authored-by: Tyler Yahn <[email protected]>
1 parent c2a6172 commit 9818ea8

File tree

2 files changed

+56
-11
lines changed

2 files changed

+56
-11
lines changed

sdk/log/logger.go

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package log // import "go.opentelemetry.io/otel/sdk/log"
55

66
import (
77
"context"
8+
"fmt"
89
"time"
910

1011
"go.opentelemetry.io/otel"
@@ -39,15 +40,9 @@ func newLogger(p *LoggerProvider, scope instrumentation.Scope) *logger {
3940
provider: p,
4041
instrumentationScope: scope,
4142
}
42-
l.initSelfObservability()
43-
return l
44-
}
45-
46-
func (l *logger) initSelfObservability() {
4743
if !x.SelfObservability.Enabled() {
48-
return
44+
return l
4945
}
50-
5146
l.selfObservabilityEnabled = true
5247
mp := otel.GetMeterProvider()
5348
m := mp.Meter("go.opentelemetry.io/otel/sdk/log",
@@ -56,8 +51,10 @@ func (l *logger) initSelfObservability() {
5651

5752
var err error
5853
if l.logCreatedMetric, err = otelconv.NewSDKLogCreated(m); err != nil {
54+
err = fmt.Errorf("failed to create log created metric: %w", err)
5955
otel.Handle(err)
6056
}
57+
return l
6158
}
6259

6360
func (l *logger) Emit(ctx context.Context, r log.Record) {

sdk/log/logger_test.go

Lines changed: 52 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@ import (
1616
"go.opentelemetry.io/otel"
1717
"go.opentelemetry.io/otel/attribute"
1818
"go.opentelemetry.io/otel/log"
19+
"go.opentelemetry.io/otel/metric"
1920
"go.opentelemetry.io/otel/sdk"
2021
"go.opentelemetry.io/otel/sdk/instrumentation"
21-
"go.opentelemetry.io/otel/sdk/metric"
22+
sdkmetric "go.opentelemetry.io/otel/sdk/metric"
2223
"go.opentelemetry.io/otel/sdk/metric/metricdata"
2324
"go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest"
2425
"go.opentelemetry.io/otel/sdk/resource"
@@ -383,9 +384,11 @@ func TestLoggerSelfObservability(t *testing.T) {
383384
t.Run(tc.name, func(t *testing.T) {
384385
t.Setenv("OTEL_GO_X_SELF_OBSERVABILITY", strconv.FormatBool(tc.selfObservabilityEnabled))
385386
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))
389392
otel.SetMeterProvider(mp)
390393
l := newLogger(NewLoggerProvider(), instrumentation.Scope{})
391394

@@ -422,3 +425,48 @@ func TestLoggerSelfObservability(t *testing.T) {
422425
})
423426
}
424427
}
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

Comments
 (0)