Skip to content

Commit 1d52fb9

Browse files
authored
[confmap] Add logger to ConverterSettings (#10135)
#### Description Adds a Logger to ConverterSettings to enable logging from within converters. Also update the expand converter to log a warning if the env var is empty or missing. #### Link to tracking issue Closes #9162 Closes #5615 #### Testing Unit tests and local testing ![image](https://github.com/open-telemetry/opentelemetry-collector/assets/12352919/af5dd1e2-62f9-4272-97c7-da57166ef07e) ```yaml receivers: nop: exporters: otlphttp: endpoint: http://0.0.0.0:4317 headers: # Not set x-test: $TEMP3 debug: # set to "detailed" verbosity: $TEMP service: telemetry: logs: level: info pipelines: traces: receivers: - nop exporters: - otlphttp - debug ``` #### Documentation Added godoc comments
1 parent 2f87518 commit 1d52fb9

File tree

7 files changed

+55
-7
lines changed

7 files changed

+55
-7
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Use this changelog template to create an entry for release notes.
2+
3+
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
4+
change_type: enhancement
5+
6+
# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver)
7+
component: confmap
8+
9+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
10+
note: Allow Converters to write logs during startup
11+
12+
# One or more tracking issues or pull requests related to the change
13+
issues: [10135]
14+
15+
# (Optional) One or more lines of additional information to render under the primary note.
16+
# These lines will be padded with 2 spaces and then inserted directly into the document.
17+
# Use pipe (|) for multiline entries.
18+
subtext:
19+
20+
# Optional: The change log or logs in which this entry should be included.
21+
# e.g. '[user]' or '[user, api]'
22+
# Include 'user' if the change is relevant to end users.
23+
# Include 'api' if there is a change to a library API.
24+
# Default: '[user]'
25+
change_logs: []

confmap/converter.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,18 @@ package confmap // import "go.opentelemetry.io/collector/confmap"
55

66
import (
77
"context"
8+
9+
"go.uber.org/zap"
810
)
911

1012
// ConverterSettings are the settings to initialize a Converter.
11-
type ConverterSettings struct{}
13+
type ConverterSettings struct {
14+
// Logger is a zap.Logger that will be passed to Converters.
15+
// Converters should be able to rely on the Logger being non-nil;
16+
// when instantiating a Converter with a ConverterFactory,
17+
// nil Logger references should be replaced with a no-op Logger.
18+
Logger *zap.Logger
19+
}
1220

1321
// ConverterFactory defines a factory that can be used to instantiate
1422
// new instances of a Converter.

confmap/converter/expandconverter/expand.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ func NewFactory() confmap.ConverterFactory {
2727
return confmap.NewConverterFactory(newConverter)
2828
}
2929

30-
func newConverter(_ confmap.ConverterSettings) confmap.Converter {
30+
func newConverter(set confmap.ConverterSettings) confmap.Converter {
3131
return converter{
3232
loggedDeprecations: make(map[string]struct{}),
33-
logger: zap.NewNop(), // TODO: pass logger in ConverterSettings
33+
logger: set.Logger,
3434
}
3535
}
3636

@@ -80,6 +80,12 @@ func (c converter) expandEnv(s string) string {
8080
if str == "$" {
8181
return "$"
8282
}
83-
return os.Getenv(str)
83+
val, exists := os.LookupEnv(str)
84+
if !exists {
85+
c.logger.Warn("Configuration references unset environment variable", zap.String("name", str))
86+
} else if len(val) == 0 {
87+
c.logger.Info("Configuration references empty environment variable", zap.String("name", str))
88+
}
89+
return val
8490
})
8591
}

confmap/converter/expandconverter/expand_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,5 +254,5 @@ func TestDeprecatedWarning(t *testing.T) {
254254
}
255255

256256
func createConverter() confmap.Converter {
257-
return NewFactory().Create(confmap.ConverterSettings{})
257+
return NewFactory().Create(confmap.ConverterSettings{Logger: zap.NewNop()})
258258
}

confmap/resolver.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,10 @@ func NewResolver(set ResolverSettings) (*Resolver, error) {
9494
set.ProviderSettings.Logger = zap.NewNop()
9595
}
9696

97+
if set.ConverterSettings.Logger == nil {
98+
set.ConverterSettings.Logger = zap.NewNop()
99+
}
100+
97101
var providers map[string]Provider
98102
var converters []Converter
99103

confmap/resolver_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,10 @@ func TestProvidesDefaultLogger(t *testing.T) {
425425
_, err := NewResolver(ResolverSettings{
426426
URIs: []string{filepath.Join("testdata", "config.yaml")},
427427
ProviderFactories: []ProviderFactory{factory},
428+
ConverterFactories: []ConverterFactory{NewConverterFactory(func(set ConverterSettings) Converter {
429+
assert.NotNil(t, set.Logger)
430+
return &mockConverter{}
431+
})},
428432
})
429433
require.NoError(t, err)
430434
require.NotNil(t, provider.logger)

otelcol/collector.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,9 @@ func NewCollector(set CollectorSettings) (*Collector, error) {
123123
bc := newBufferedCore(zapcore.DebugLevel)
124124
cc := &collectorCore{core: bc}
125125
options := append([]zap.Option{zap.WithCaller(true)}, set.LoggingOptions...)
126-
set.ConfigProviderSettings.ResolverSettings.ProviderSettings = confmap.ProviderSettings{Logger: zap.New(cc, options...)}
127-
set.ConfigProviderSettings.ResolverSettings.ConverterSettings = confmap.ConverterSettings{}
126+
logger := zap.New(cc, options...)
127+
set.ConfigProviderSettings.ResolverSettings.ProviderSettings = confmap.ProviderSettings{Logger: logger}
128+
set.ConfigProviderSettings.ResolverSettings.ConverterSettings = confmap.ConverterSettings{Logger: logger}
128129

129130
if configProvider == nil {
130131
configProvider, err = NewConfigProvider(set.ConfigProviderSettings)

0 commit comments

Comments
 (0)