From 14441aefdf8879f6845d6502a6ba50e54a4feaa2 Mon Sep 17 00:00:00 2001 From: Tyler Yahn Date: Sat, 18 May 2024 02:00:00 -0700 Subject: [PATCH] Identify logger with schemaURL in global logger provider (#5375) Fix #5366 --- CHANGELOG.md | 1 + log/internal/global/log.go | 8 ++++++-- log/internal/global/log_test.go | 36 +++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d6925232f0d..5025bced912 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - Comparison of unordered maps in `go.opentelemetry.io/otel/log.KeyValue` and `go.opentelemetry.io/otel/log.Value`. (#5306) - Fix wrong package name of the error message when parsing endpoint URL in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#5371) - Split the behavior of `Recorder` in `go.opentelemetry.io/otel/log/logtest` so it behaves as a `LoggerProvider` only. (#5365) +- Identify the `Logger` returned from the global `LoggerProvider` in `go.opentelemetry.io/otel/log/global` with its schama URL. (#5375) ## [1.26.0/0.48.0/0.2.0-alpha] 2024-04-24 diff --git a/log/internal/global/log.go b/log/internal/global/log.go index ffa5db99664..acd333e8b19 100644 --- a/log/internal/global/log.go +++ b/log/internal/global/log.go @@ -15,7 +15,7 @@ import ( // instLib defines the instrumentation library a logger is created for. // // Do not use sdk/instrumentation (API cannot depend on the SDK). -type instLib struct{ name, version string } +type instLib struct{ name, version, schemaURL string } type loggerProvider struct { embedded.LoggerProvider @@ -37,7 +37,11 @@ func (p *loggerProvider) Logger(name string, options ...log.LoggerOption) log.Lo } cfg := log.NewLoggerConfig(options...) - key := instLib{name, cfg.InstrumentationVersion()} + key := instLib{ + name: name, + version: cfg.InstrumentationVersion(), + schemaURL: cfg.SchemaURL(), + } if p.loggers == nil { l := &logger{name: name, options: options} diff --git a/log/internal/global/log_test.go b/log/internal/global/log_test.go index d7bfb990c52..f465abc9011 100644 --- a/log/internal/global/log_test.go +++ b/log/internal/global/log_test.go @@ -158,3 +158,39 @@ func TestDelegation(t *testing.T) { assert.Equal(t, 1, post.(*testLogger).enabledN, "Enabled not delegated") } } + +func TestLoggerIdentity(t *testing.T) { + type id struct{ name, ver, url string } + + ids := []id{ + {"name-a", "version-a", "url-a"}, + {"name-a", "version-a", "url-b"}, + {"name-a", "version-b", "url-a"}, + {"name-a", "version-b", "url-b"}, + {"name-b", "version-a", "url-a"}, + {"name-b", "version-a", "url-b"}, + {"name-b", "version-b", "url-a"}, + {"name-b", "version-b", "url-b"}, + } + + provider := &loggerProvider{} + newLogger := func(i id) log.Logger { + return provider.Logger( + i.name, + log.WithInstrumentationVersion(i.ver), + log.WithSchemaURL(i.url), + ) + } + + for i, id0 := range ids { + for j, id1 := range ids { + l0, l1 := newLogger(id0), newLogger(id1) + + if i == j { + assert.Samef(t, l0, l1, "logger(%v) != logger(%v)", id0, id1) + } else { + assert.NotSamef(t, l0, l1, "logger(%v) == logger(%v)", id0, id1) + } + } + } +}