Skip to content

Commit 14441ae

Browse files
authored
Identify logger with schemaURL in global logger provider (#5375)
Fix #5366
1 parent ebd0ade commit 14441ae

File tree

3 files changed

+43
-2
lines changed

3 files changed

+43
-2
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
3838
- Comparison of unordered maps in `go.opentelemetry.io/otel/log.KeyValue` and `go.opentelemetry.io/otel/log.Value`. (#5306)
3939
- Fix wrong package name of the error message when parsing endpoint URL in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#5371)
4040
- Split the behavior of `Recorder` in `go.opentelemetry.io/otel/log/logtest` so it behaves as a `LoggerProvider` only. (#5365)
41+
- Identify the `Logger` returned from the global `LoggerProvider` in `go.opentelemetry.io/otel/log/global` with its schama URL. (#5375)
4142

4243
## [1.26.0/0.48.0/0.2.0-alpha] 2024-04-24
4344

log/internal/global/log.go

+6-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import (
1515
// instLib defines the instrumentation library a logger is created for.
1616
//
1717
// Do not use sdk/instrumentation (API cannot depend on the SDK).
18-
type instLib struct{ name, version string }
18+
type instLib struct{ name, version, schemaURL string }
1919

2020
type loggerProvider struct {
2121
embedded.LoggerProvider
@@ -37,7 +37,11 @@ func (p *loggerProvider) Logger(name string, options ...log.LoggerOption) log.Lo
3737
}
3838

3939
cfg := log.NewLoggerConfig(options...)
40-
key := instLib{name, cfg.InstrumentationVersion()}
40+
key := instLib{
41+
name: name,
42+
version: cfg.InstrumentationVersion(),
43+
schemaURL: cfg.SchemaURL(),
44+
}
4145

4246
if p.loggers == nil {
4347
l := &logger{name: name, options: options}

log/internal/global/log_test.go

+36
Original file line numberDiff line numberDiff line change
@@ -158,3 +158,39 @@ func TestDelegation(t *testing.T) {
158158
assert.Equal(t, 1, post.(*testLogger).enabledN, "Enabled not delegated")
159159
}
160160
}
161+
162+
func TestLoggerIdentity(t *testing.T) {
163+
type id struct{ name, ver, url string }
164+
165+
ids := []id{
166+
{"name-a", "version-a", "url-a"},
167+
{"name-a", "version-a", "url-b"},
168+
{"name-a", "version-b", "url-a"},
169+
{"name-a", "version-b", "url-b"},
170+
{"name-b", "version-a", "url-a"},
171+
{"name-b", "version-a", "url-b"},
172+
{"name-b", "version-b", "url-a"},
173+
{"name-b", "version-b", "url-b"},
174+
}
175+
176+
provider := &loggerProvider{}
177+
newLogger := func(i id) log.Logger {
178+
return provider.Logger(
179+
i.name,
180+
log.WithInstrumentationVersion(i.ver),
181+
log.WithSchemaURL(i.url),
182+
)
183+
}
184+
185+
for i, id0 := range ids {
186+
for j, id1 := range ids {
187+
l0, l1 := newLogger(id0), newLogger(id1)
188+
189+
if i == j {
190+
assert.Samef(t, l0, l1, "logger(%v) != logger(%v)", id0, id1)
191+
} else {
192+
assert.NotSamef(t, l0, l1, "logger(%v) == logger(%v)", id0, id1)
193+
}
194+
}
195+
}
196+
}

0 commit comments

Comments
 (0)