Skip to content

Commit e0f470f

Browse files
authored
fix(collector): respect log level as configured in collector config (#2243)
1 parent 943f871 commit e0f470f

4 files changed

Lines changed: 92 additions & 5 deletions

File tree

collector/go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,10 @@ require (
3333
go.opentelemetry.io/collector/confmap/provider/httpprovider v1.56.0
3434
go.opentelemetry.io/collector/confmap/provider/httpsprovider v1.56.0
3535
go.opentelemetry.io/collector/confmap/provider/yamlprovider v1.56.0
36+
go.opentelemetry.io/collector/exporter/exportertest v0.150.0
3637
go.opentelemetry.io/collector/otelcol v0.150.0
38+
go.opentelemetry.io/collector/receiver/receivertest v0.150.0
39+
go.opentelemetry.io/collector/service v0.150.0
3740
go.uber.org/multierr v1.11.0
3841
go.uber.org/zap v1.27.1
3942
)
@@ -202,7 +205,6 @@ require (
202205
go.opentelemetry.io/collector/exporter/debugexporter v0.150.0 // indirect
203206
go.opentelemetry.io/collector/exporter/exporterhelper v0.150.0 // indirect
204207
go.opentelemetry.io/collector/exporter/exporterhelper/xexporterhelper v0.150.0 // indirect
205-
go.opentelemetry.io/collector/exporter/exportertest v0.150.0 // indirect
206208
go.opentelemetry.io/collector/exporter/otlpexporter v0.150.0 // indirect
207209
go.opentelemetry.io/collector/exporter/otlphttpexporter v0.150.0 // indirect
208210
go.opentelemetry.io/collector/exporter/xexporter v0.150.0 // indirect
@@ -234,10 +236,8 @@ require (
234236
go.opentelemetry.io/collector/receiver v1.56.0 // indirect
235237
go.opentelemetry.io/collector/receiver/otlpreceiver v0.150.0 // indirect
236238
go.opentelemetry.io/collector/receiver/receiverhelper v0.150.0 // indirect
237-
go.opentelemetry.io/collector/receiver/receivertest v0.150.0 // indirect
238239
go.opentelemetry.io/collector/receiver/xreceiver v0.150.0 // indirect
239240
go.opentelemetry.io/collector/semconv v0.128.0 // indirect
240-
go.opentelemetry.io/collector/service v0.150.0 // indirect
241241
go.opentelemetry.io/collector/service/hostcapabilities v0.150.0 // indirect
242242
go.opentelemetry.io/contrib/bridges/otelzap v0.18.0 // indirect
243243
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 // indirect

collector/internal/collector/collector.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,18 @@ func (c *Collector) Start(ctx context.Context) error {
103103
Factories: func() (otelcol.Factories, error) {
104104
return c.factories, nil
105105
},
106-
LoggingOptions: []zap.Option{zap.WrapCore(func(_ zapcore.Core) zapcore.Core {
107-
return c.logger.Core()
106+
// TODO: fully decouple extension and collector log levels so that
107+
// OPENTELEMETRY_EXTENSION_LOG_LEVEL only affects extension logs.
108+
LoggingOptions: []zap.Option{zap.WrapCore(func(collectorCore zapcore.Core) zapcore.Core {
109+
extensionCore := c.logger.Core()
110+
if zapcore.LevelOf(collectorCore) == zapcore.InfoLevel {
111+
return extensionCore
112+
}
113+
increased, err := zapcore.NewIncreaseLevelCore(extensionCore, collectorCore)
114+
if err != nil {
115+
return extensionCore
116+
}
117+
return increased
108118
})},
109119
}
110120
var err error
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
// Copyright The OpenTelemetry Authors
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package collector
16+
17+
import (
18+
"context"
19+
"testing"
20+
21+
"github.com/stretchr/testify/assert"
22+
"github.com/stretchr/testify/require"
23+
"go.opentelemetry.io/collector/exporter/exportertest"
24+
"go.opentelemetry.io/collector/otelcol"
25+
"go.opentelemetry.io/collector/receiver/receivertest"
26+
"go.opentelemetry.io/collector/service/telemetry/otelconftelemetry"
27+
"go.uber.org/zap"
28+
"go.uber.org/zap/zapcore"
29+
"go.uber.org/zap/zaptest/observer"
30+
)
31+
32+
func TestCollectorConfigLogLevelIsOverridden(t *testing.T) {
33+
t.Setenv("OPENTELEMETRY_COLLECTOR_CONFIG_URI", "file:testdata/config-error-level.yaml")
34+
35+
receivers, err := otelcol.MakeFactoryMap(receivertest.NewNopFactory())
36+
require.NoError(t, err)
37+
exporters, err := otelcol.MakeFactoryMap(exportertest.NewNopFactory())
38+
require.NoError(t, err)
39+
40+
factories := otelcol.Factories{
41+
Receivers: receivers,
42+
Exporters: exporters,
43+
Telemetry: otelconftelemetry.NewFactory(),
44+
}
45+
46+
// Use a nop logger so extension logs don't end up in our observer
47+
collector := NewCollector(zap.NewNop(), factories, "test")
48+
// Replace collector logger with an observed core at INFO level.
49+
collectorObservedCore, collectorLogs := observer.New(zapcore.InfoLevel)
50+
collector.logger = zap.New(collectorObservedCore)
51+
52+
ctx := context.Background()
53+
err = collector.Start(ctx)
54+
require.NoError(t, err)
55+
56+
err = collector.Stop()
57+
require.NoError(t, err)
58+
59+
// If the collector config log level is respected, there are no INFO logs
60+
infoLogs := collectorLogs.FilterLevelExact(zapcore.InfoLevel).All()
61+
assert.Empty(t, infoLogs,
62+
"INFO logs from the collector should be suppressed when config sets level: error")
63+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
receivers:
2+
nop:
3+
4+
exporters:
5+
nop:
6+
7+
service:
8+
telemetry:
9+
logs:
10+
level: error
11+
pipelines:
12+
traces:
13+
receivers: [nop]
14+
exporters: [nop]

0 commit comments

Comments
 (0)