diff options
Diffstat (limited to 'vendor/go.opentelemetry.io/contrib/exporters/autoexport/logs.go')
| -rw-r--r-- | vendor/go.opentelemetry.io/contrib/exporters/autoexport/logs.go | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/vendor/go.opentelemetry.io/contrib/exporters/autoexport/logs.go b/vendor/go.opentelemetry.io/contrib/exporters/autoexport/logs.go new file mode 100644 index 000000000..dd12d0332 --- /dev/null +++ b/vendor/go.opentelemetry.io/contrib/exporters/autoexport/logs.go @@ -0,0 +1,93 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +package autoexport // import "go.opentelemetry.io/contrib/exporters/autoexport" + +import ( + "context" + "os" + + "go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc" + "go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp" + "go.opentelemetry.io/otel/exporters/stdout/stdoutlog" + "go.opentelemetry.io/otel/sdk/log" +) + +const otelExporterOTLPLogsProtoEnvKey = "OTEL_EXPORTER_OTLP_LOGS_PROTOCOL" + +// LogOption applies an autoexport configuration option. +type LogOption = option[log.Exporter] + +var logsSignal = newSignal[log.Exporter]("OTEL_LOGS_EXPORTER") + +// WithFallbackLogExporter sets the fallback exporter to use when no exporter +// is configured through the OTEL_LOGS_EXPORTER environment variable. +func WithFallbackLogExporter(logExporterFactory func(ctx context.Context) (log.Exporter, error)) LogOption { + return withFallbackFactory[log.Exporter](logExporterFactory) +} + +// NewLogExporter returns a configured [go.opentelemetry.io/otel/sdk/log.Exporter] +// defined using the environment variables described below. +// +// OTEL_LOGS_EXPORTER defines the logs exporter; supported values: +// - "none" - "no operation" exporter +// - "otlp" (default) - OTLP exporter; see [go.opentelemetry.io/otel/exporters/otlp/otlplog] +// - "console" - Standard output exporter; see [go.opentelemetry.io/otel/exporters/stdout/stdoutlog] +// +// OTEL_EXPORTER_OTLP_PROTOCOL defines OTLP exporter's transport protocol; +// supported values: +// - "http/protobuf" (default) - protobuf-encoded data over HTTP connection; +// see: [go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp] +// - "grpc" - gRPC with protobuf-encoded data over HTTP/2 connection; +// see: [go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc] +// +// OTEL_EXPORTER_OTLP_LOGS_PROTOCOL defines OTLP exporter's transport protocol for the logs signal; +// supported values are the same as OTEL_EXPORTER_OTLP_PROTOCOL. +// +// An error is returned if an environment value is set to an unhandled value. +// +// Use [RegisterLogExporter] to handle more values of OTEL_LOGS_EXPORTER. +// +// Use [WithFallbackLogExporter] option to change the returned exporter +// when OTEL_LOGS_EXPORTER is unset or empty. +// +// Use [IsNoneLogExporter] to check if the returned exporter is a "no operation" exporter. +func NewLogExporter(ctx context.Context, opts ...LogOption) (log.Exporter, error) { + return logsSignal.create(ctx, opts...) +} + +// RegisterLogExporter sets the log.Exporter factory to be used when the +// OTEL_LOGS_EXPORTER environment variable contains the exporter name. +// This will panic if name has already been registered. +func RegisterLogExporter(name string, factory func(context.Context) (log.Exporter, error)) { + must(logsSignal.registry.store(name, factory)) +} + +func init() { + RegisterLogExporter("otlp", func(ctx context.Context) (log.Exporter, error) { + proto := os.Getenv(otelExporterOTLPLogsProtoEnvKey) + if proto == "" { + proto = os.Getenv(otelExporterOTLPProtoEnvKey) + } + + // Fallback to default, http/protobuf. + if proto == "" { + proto = "http/protobuf" + } + + switch proto { + case "grpc": + return otlploggrpc.New(ctx) + case "http/protobuf": + return otlploghttp.New(ctx) + default: + return nil, errInvalidOTLPProtocol + } + }) + RegisterLogExporter("console", func(ctx context.Context) (log.Exporter, error) { + return stdoutlog.New() + }) + RegisterLogExporter("none", func(ctx context.Context) (log.Exporter, error) { + return noopLogExporter{}, nil + }) +} |
