Skip to content

Commit 0b60ef8

Browse files
committed
Apply feedback from @mx-psi . Create the sampledLogger the first time using it
1 parent 20536a1 commit 0b60ef8

File tree

6 files changed

+21
-12
lines changed

6 files changed

+21
-12
lines changed

.chloggen/SampledLoggerTelemetry.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ issues: [8134]
1515
# (Optional) One or more lines of additional information to render under the primary note.
1616
# These lines will be padded with 2 spaces and then inserted directly into the document.
1717
# Use pipe (|) for multiline entries.
18-
subtext: The sampled logger is configured by `LogsSamplingConfig` (`service.telemetry.logs.sampling`).
18+
subtext: The sampled logger is built from the logger. It is configured by `LogsSamplingConfig` (`service.telemetry.logs.sampling`).
1919

2020
# Optional: The change log or logs in which this entry should be included.
2121
# e.g. '[user]' or '[user, api]'

component/componenttest/nop_telemetry.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import (
1717
func NewNopTelemetrySettings() component.TelemetrySettings {
1818
return component.TelemetrySettings{
1919
Logger: zap.NewNop(),
20-
SampledLogger: zap.NewNop(),
20+
SampledLogger: zap.NewNop,
2121
TracerProvider: trace.NewNoopTracerProvider(),
2222
MeterProvider: noop.NewMeterProvider(),
2323
MetricsLevel: configtelemetry.LevelNone,

component/telemetry.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@ type TelemetrySettings struct {
1717
// component to be used later as well.
1818
Logger *zap.Logger
1919

20-
// SampledLogger passed to the created component.
20+
// SampledLogger is built from the logger. It is passed to the created component.
2121
// It will be used to avoid flooding the logs with messages that are repeated frequently.
22-
SampledLogger *zap.Logger
22+
// It will be built the first time used.
23+
SampledLogger func() *zap.Logger
2324

2425
// TracerProvider that the factory can pass to other instrumented third-party libraries.
2526
TracerProvider trace.TracerProvider

exporter/exporterhelper/common.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ func newBaseExporter(set exporter.CreateSettings, bs *baseSettings, signal compo
171171
return nil, err
172172
}
173173

174-
be.qrSender = newQueuedRetrySender(set.ID, signal, bs.queue, bs.RetrySettings, &timeoutSender{cfg: bs.TimeoutSettings}, set.SampledLogger)
174+
be.qrSender = newQueuedRetrySender(set.ID, signal, bs.queue, bs.RetrySettings, &timeoutSender{cfg: bs.TimeoutSettings}, set.SampledLogger())
175175
be.sender = be.qrSender
176176
be.StartFunc = func(ctx context.Context, host component.Host) error {
177177
// First start the wrapped exporter.

service/service_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -412,8 +412,8 @@ func TestServiceTelemetryLoggers(t *testing.T) {
412412
assert.NoError(t, srv.Shutdown(context.Background()))
413413
})
414414
assert.NotNil(t, srv.telemetrySettings.Logger)
415-
assert.NotNil(t, srv.telemetrySettings.SampledLogger)
416-
assert.NotEqual(t, srv.telemetrySettings.Logger, srv.telemetrySettings.SampledLogger)
415+
assert.NotNil(t, srv.telemetrySettings.SampledLogger())
416+
assert.NotEqual(t, srv.telemetrySettings.Logger, srv.telemetrySettings.SampledLogger())
417417
}
418418

419419
func assertResourceLabels(t *testing.T, res pcommon.Resource, expectedLabels map[string]labelValue) {

service/telemetry/telemetry.go

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package telemetry // import "go.opentelemetry.io/collector/service/telemetry"
55

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

1011
sdktrace "go.opentelemetry.io/otel/sdk/trace"
@@ -16,8 +17,11 @@ import (
1617

1718
type Telemetry struct {
1819
logger *zap.Logger
19-
sampledLogger *zap.Logger
2020
tracerProvider *sdktrace.TracerProvider
21+
22+
createSampledLogger sync.Once
23+
sampledLogger *zap.Logger
24+
samplingCfg *LogsSamplingConfig
2125
}
2226

2327
func (t *Telemetry) TracerProvider() trace.TracerProvider {
@@ -28,8 +32,13 @@ func (t *Telemetry) Logger() *zap.Logger {
2832
return t.logger
2933
}
3034

31-
func (t *Telemetry) SampledLogger() *zap.Logger {
32-
return t.sampledLogger
35+
func (t *Telemetry) SampledLogger() func() *zap.Logger {
36+
return func() *zap.Logger {
37+
t.createSampledLogger.Do(func() {
38+
t.sampledLogger = newSampledLogger(t.samplingCfg, t.logger)
39+
})
40+
return t.sampledLogger
41+
}
3342
}
3443

3544
func (t *Telemetry) Shutdown(ctx context.Context) error {
@@ -50,16 +59,15 @@ func New(_ context.Context, set Settings, cfg Config) (*Telemetry, error) {
5059
if err != nil {
5160
return nil, err
5261
}
53-
sampledLogger := newSampledLogger(cfg.Logs.Sampling, logger)
5462

5563
tp := sdktrace.NewTracerProvider(
5664
// needed for supporting the zpages extension
5765
sdktrace.WithSampler(alwaysRecord()),
5866
)
5967
return &Telemetry{
6068
logger: logger,
61-
sampledLogger: sampledLogger,
6269
tracerProvider: tp,
70+
samplingCfg: cfg.Logs.Sampling,
6371
}, nil
6472
}
6573

0 commit comments

Comments
 (0)