summaryrefslogtreecommitdiff
path: root/vendor/go.opentelemetry.io/otel/sdk/log/provider.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/go.opentelemetry.io/otel/sdk/log/provider.go')
-rw-r--r--vendor/go.opentelemetry.io/otel/sdk/log/provider.go277
1 files changed, 0 insertions, 277 deletions
diff --git a/vendor/go.opentelemetry.io/otel/sdk/log/provider.go b/vendor/go.opentelemetry.io/otel/sdk/log/provider.go
deleted file mode 100644
index c69422e12..000000000
--- a/vendor/go.opentelemetry.io/otel/sdk/log/provider.go
+++ /dev/null
@@ -1,277 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package log // import "go.opentelemetry.io/otel/sdk/log"
-
-import (
- "context"
- "errors"
- "sync"
- "sync/atomic"
-
- "go.opentelemetry.io/otel"
- "go.opentelemetry.io/otel/internal/global"
- "go.opentelemetry.io/otel/log"
- "go.opentelemetry.io/otel/log/embedded"
- "go.opentelemetry.io/otel/log/noop"
- "go.opentelemetry.io/otel/sdk/instrumentation"
- "go.opentelemetry.io/otel/sdk/resource"
-)
-
-const (
- defaultAttrCntLim = 128
- defaultAttrValLenLim = -1
-
- envarAttrCntLim = "OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT"
- envarAttrValLenLim = "OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT"
-)
-
-type providerConfig struct {
- resource *resource.Resource
- processors []Processor
- fltrProcessors []FilterProcessor
- attrCntLim setting[int]
- attrValLenLim setting[int]
- allowDupKeys setting[bool]
-}
-
-func newProviderConfig(opts []LoggerProviderOption) providerConfig {
- var c providerConfig
- for _, opt := range opts {
- c = opt.apply(c)
- }
-
- if c.resource == nil {
- c.resource = resource.Default()
- }
-
- c.attrCntLim = c.attrCntLim.Resolve(
- getenv[int](envarAttrCntLim),
- fallback[int](defaultAttrCntLim),
- )
-
- c.attrValLenLim = c.attrValLenLim.Resolve(
- getenv[int](envarAttrValLenLim),
- fallback[int](defaultAttrValLenLim),
- )
-
- return c
-}
-
-// LoggerProvider handles the creation and coordination of Loggers. All Loggers
-// created by a LoggerProvider will be associated with the same Resource.
-type LoggerProvider struct {
- embedded.LoggerProvider
-
- resource *resource.Resource
- processors []Processor
- fltrProcessors []FilterProcessor
- attributeCountLimit int
- attributeValueLengthLimit int
- allowDupKeys bool
-
- loggersMu sync.Mutex
- loggers map[instrumentation.Scope]*logger
-
- stopped atomic.Bool
-
- noCmp [0]func() //nolint: unused // This is indeed used.
-}
-
-// Compile-time check LoggerProvider implements log.LoggerProvider.
-var _ log.LoggerProvider = (*LoggerProvider)(nil)
-
-// NewLoggerProvider returns a new and configured LoggerProvider.
-//
-// By default, the returned LoggerProvider is configured with the default
-// Resource and no Processors. Processors cannot be added after a LoggerProvider is
-// created. This means the returned LoggerProvider, one created with no
-// Processors, will perform no operations.
-func NewLoggerProvider(opts ...LoggerProviderOption) *LoggerProvider {
- cfg := newProviderConfig(opts)
- return &LoggerProvider{
- resource: cfg.resource,
- processors: cfg.processors,
- fltrProcessors: cfg.fltrProcessors,
- attributeCountLimit: cfg.attrCntLim.Value,
- attributeValueLengthLimit: cfg.attrValLenLim.Value,
- allowDupKeys: cfg.allowDupKeys.Value,
- }
-}
-
-// Logger returns a new [log.Logger] with the provided name and configuration.
-//
-// If p is shut down, a [noop.Logger] instance is returned.
-//
-// This method can be called concurrently.
-func (p *LoggerProvider) Logger(name string, opts ...log.LoggerOption) log.Logger {
- if name == "" {
- global.Warn("Invalid Logger name.", "name", name)
- }
-
- if p.stopped.Load() {
- return noop.NewLoggerProvider().Logger(name, opts...)
- }
-
- cfg := log.NewLoggerConfig(opts...)
- scope := instrumentation.Scope{
- Name: name,
- Version: cfg.InstrumentationVersion(),
- SchemaURL: cfg.SchemaURL(),
- Attributes: cfg.InstrumentationAttributes(),
- }
-
- p.loggersMu.Lock()
- defer p.loggersMu.Unlock()
-
- if p.loggers == nil {
- l := newLogger(p, scope)
- p.loggers = map[instrumentation.Scope]*logger{scope: l}
- return l
- }
-
- l, ok := p.loggers[scope]
- if !ok {
- l = newLogger(p, scope)
- p.loggers[scope] = l
- }
-
- return l
-}
-
-// Shutdown shuts down the provider and all processors.
-//
-// This method can be called concurrently.
-func (p *LoggerProvider) Shutdown(ctx context.Context) error {
- stopped := p.stopped.Swap(true)
- if stopped {
- return nil
- }
-
- var err error
- for _, p := range p.processors {
- err = errors.Join(err, p.Shutdown(ctx))
- }
- return err
-}
-
-// ForceFlush flushes all processors.
-//
-// This method can be called concurrently.
-func (p *LoggerProvider) ForceFlush(ctx context.Context) error {
- if p.stopped.Load() {
- return nil
- }
-
- var err error
- for _, p := range p.processors {
- err = errors.Join(err, p.ForceFlush(ctx))
- }
- return err
-}
-
-// LoggerProviderOption applies a configuration option value to a LoggerProvider.
-type LoggerProviderOption interface {
- apply(providerConfig) providerConfig
-}
-
-type loggerProviderOptionFunc func(providerConfig) providerConfig
-
-func (fn loggerProviderOptionFunc) apply(c providerConfig) providerConfig {
- return fn(c)
-}
-
-// WithResource associates a Resource with a LoggerProvider. This Resource
-// represents the entity producing telemetry and is associated with all Loggers
-// the LoggerProvider will create.
-//
-// By default, if this Option is not used, the default Resource from the
-// go.opentelemetry.io/otel/sdk/resource package will be used.
-func WithResource(res *resource.Resource) LoggerProviderOption {
- return loggerProviderOptionFunc(func(cfg providerConfig) providerConfig {
- var err error
- cfg.resource, err = resource.Merge(resource.Environment(), res)
- if err != nil {
- otel.Handle(err)
- }
- return cfg
- })
-}
-
-// WithProcessor associates Processor with a LoggerProvider.
-//
-// By default, if this option is not used, the LoggerProvider will perform no
-// operations; no data will be exported without a processor.
-//
-// The SDK invokes the processors sequentially in the same order as they were
-// registered.
-//
-// For production, use [NewBatchProcessor] to batch log records before they are exported.
-// For testing and debugging, use [NewSimpleProcessor] to synchronously export log records.
-//
-// See [FilterProcessor] for information about how a Processor can support filtering.
-func WithProcessor(processor Processor) LoggerProviderOption {
- return loggerProviderOptionFunc(func(cfg providerConfig) providerConfig {
- cfg.processors = append(cfg.processors, processor)
- if f, ok := processor.(FilterProcessor); ok {
- cfg.fltrProcessors = append(cfg.fltrProcessors, f)
- }
- return cfg
- })
-}
-
-// WithAttributeCountLimit sets the maximum allowed log record attribute count.
-// Any attribute added to a log record once this limit is reached will be dropped.
-//
-// Setting this to zero means no attributes will be recorded.
-//
-// Setting this to a negative value means no limit is applied.
-//
-// If the OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT environment variable is set,
-// and this option is not passed, that variable value will be used.
-//
-// By default, if an environment variable is not set, and this option is not
-// passed, 128 will be used.
-func WithAttributeCountLimit(limit int) LoggerProviderOption {
- return loggerProviderOptionFunc(func(cfg providerConfig) providerConfig {
- cfg.attrCntLim = newSetting(limit)
- return cfg
- })
-}
-
-// WithAttributeValueLengthLimit sets the maximum allowed attribute value length.
-//
-// This limit only applies to string and string slice attribute values.
-// Any string longer than this value will be truncated to this length.
-//
-// Setting this to a negative value means no limit is applied.
-//
-// If the OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT environment variable is set,
-// and this option is not passed, that variable value will be used.
-//
-// By default, if an environment variable is not set, and this option is not
-// passed, no limit (-1) will be used.
-func WithAttributeValueLengthLimit(limit int) LoggerProviderOption {
- return loggerProviderOptionFunc(func(cfg providerConfig) providerConfig {
- cfg.attrValLenLim = newSetting(limit)
- return cfg
- })
-}
-
-// WithAllowKeyDuplication sets whether deduplication is skipped for log attributes or other key-value collections.
-//
-// By default, the key-value collections within a log record are deduplicated to comply with the OpenTelemetry Specification.
-// Deduplication means that if multiple key–value pairs with the same key are present, only a single pair
-// is retained and others are discarded.
-//
-// Disabling deduplication with this option can improve performance e.g. of adding attributes to the log record.
-//
-// Note that if you disable deduplication, you are responsible for ensuring that duplicate
-// key-value pairs within in a single collection are not emitted,
-// or that the telemetry receiver can handle such duplicates.
-func WithAllowKeyDuplication() LoggerProviderOption {
- return loggerProviderOptionFunc(func(cfg providerConfig) providerConfig {
- cfg.allowDupKeys = newSetting(true)
- return cfg
- })
-}