Skip to content

OtelLogger

Connects Effect logging to the OpenTelemetry Logs SDK.

This module turns Effect log events into OpenTelemetry log records. It maps Effect log levels to OpenTelemetry severity numbers, provides the OtelLoggerProvider service, creates an Effect Logger with make, and offers layers for installing that logger or creating a scoped SDK LoggerProvider from one or more LogRecordProcessors.

5 exports Added in v4.0.0 Source

Constructors

make

Added in v4.0.0 Source

Creates an Effect logger that emits log records through the configured OpenTelemetry logger provider.

Signature

declare const make: Effect.Effect<Logger.Logger<unknown, void>, never, OtelLoggerProvider>;

Converting

Maps an Effect LogLevel to the corresponding OpenTelemetry SeverityNumber.

Details

OpenTelemetry log severity numbers are in the range 1 through 24. This function maps from Effect's log levels instead of using LogLevel.getOrdinal, whose internal sort ordinals, such as the Info ordinal 20000, fall outside the OpenTelemetry logs data model and can be treated as UNSPECIFIED by validating backends.

Signature

declare function logLevelToSeverityNumber(level: LogLevel): SeverityNumber;

Layers

layer

Added in v4.0.0 Source

Creates a layer that installs the OpenTelemetry-backed Effect logger, merging with existing loggers by default.

When to use

Use to install the OpenTelemetry-backed Effect logger in an application that has an OtelLoggerProvider, so standard Effect logging emits OpenTelemetry log records.

Details

The layer installs the logger created by make. mergeWithExisting defaults to true; set it to false to replace the current logger set.

See

Signature

declare function layer(options: {
  readonly mergeWithExisting?: boolean;
}): Layer<never, never, OtelLoggerProvider>;

Creates a scoped OpenTelemetry logger provider from one or more log record processors, using the current Resource and flushing and shutting down the provider when the layer is released.

Signature

declare function layerLoggerProvider(
  processor: any,
  config?: Omit<LoggerProviderConfig, "resource"> & {
    readonly shutdownTimeout?: Input;
  },
): Layer<OtelLoggerProvider, never, Resource>;

Services

Context service containing the OpenTelemetry LoggerProvider used to emit Effect log records.

Signature

declare class OtelLoggerProvider extends Shape<
  "@effect/opentelemetry/Logger/OtelLoggerProvider",
  LoggerProvider,
  this
> {
  constructor(_: never);
}