Files
substrate/vendor/go.opentelemetry.io/otel/log/internal/global/state.go
T
Benjamin Elderanddependabot[bot] 51a71cb365 upgrade otel log to 0.21 (#1958)
fixes https://github.com/agent-substrate/substrate/pull/1952

security bump stuck by breaking changes.

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-28 22:26:40 +00:00

54 lines
1.3 KiB
Go

// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package global
import (
"errors"
"sync"
"sync/atomic"
"go.opentelemetry.io/otel/internal/global"
"go.opentelemetry.io/otel/log"
)
var (
globalLoggerProvider = defaultLoggerProvider()
delegateLoggerOnce sync.Once
)
func defaultLoggerProvider() *atomic.Value {
v := &atomic.Value{}
v.Store(loggerProviderHolder{provider: &loggerProvider{}})
return v
}
type loggerProviderHolder struct {
provider log.LoggerProvider
}
// GetLoggerProvider returns the global LoggerProvider.
func GetLoggerProvider() log.LoggerProvider {
return globalLoggerProvider.Load().(loggerProviderHolder).provider
}
// SetLoggerProvider sets the global LoggerProvider.
func SetLoggerProvider(provider log.LoggerProvider) {
current := GetLoggerProvider()
if _, cOk := current.(*loggerProvider); cOk {
if _, mpOk := provider.(*loggerProvider); mpOk && current == provider {
err := errors.New("invalid delegation: LoggerProvider self-delegation")
global.Error(err, "No delegate will be configured")
return
}
}
delegateLoggerOnce.Do(func() {
if def, ok := current.(*loggerProvider); ok {
def.setDelegate(provider)
}
})
globalLoggerProvider.Store(loggerProviderHolder{provider: provider})
}