instrument_logger (instrument v0.6.1)

View Source

Erlang logger integration for OpenTelemetry-compatible instrumentation.

This module installs a logger filter that automatically adds trace context (trace_id, span_id) to log metadata when a span is active. It can also export logs to registered log exporters.

Example Usage

  %% Install the logger integration (filter mode - adds trace context)
  instrument_logger:install(),
 
  %% Install with exporter mode (sends logs to registered exporters)
  instrument_log_exporter:register(instrument_log_exporter_console:new()),
  instrument_logger:install(#{exporter => true}),
 
  %% Within a span, logs automatically include trace context
  instrument_tracer:with_span(<<"my_operation">>, fun() ->
    logger:info("Processing request", #{user => User}),
    %% The log will include trace_id and span_id in metadata
    do_work()
  end).

Summary

Functions

Adds trace context to a metadata map. This can be used manually if you prefer not to install the filter.

Emits a log record with trace context.

Emits a log record at the specified level with trace context.

Filter config callback for logger.

Installs the logger integration with default options. By default, installs a primary filter that adds trace context to all logs.

Installs the logger integration with options. Options: - filter => true (default) - Adds trace context to all logs - handler => true - Installs a handler that formats and outputs logs - exporter => true - Installs a handler that sends logs to registered exporters - level => info (default) - Minimum level for handler

Maps Erlang logger level to OTel severity number.

Maps Erlang logger level to OTel severity text.

Logger handler callback. This is called when installed as a handler (not filter).

Creates an OTel log record from a logger event.

Uninstalls the logger integration.

Types

install_opts/0

-type install_opts() ::
          #{handler => boolean(), filter => boolean(), exporter => boolean(), level => logger:level()}.

Functions

add_trace_context(Metadata)

-spec add_trace_context(map()) -> map().

Adds trace context to a metadata map. This can be used manually if you prefer not to install the filter.

emit(Body)

-spec emit(term()) -> ok.

Emits a log record with trace context.

emit(Level, Body)

-spec emit(logger:level(), term()) -> ok.

Emits a log record at the specified level with trace context.

filter_config(Log)

-spec filter_config(logger:filter_arg()) -> logger:filter_return().

Filter config callback for logger.

install()

-spec install() -> ok | {error, term()}.

Installs the logger integration with default options. By default, installs a primary filter that adds trace context to all logs.

install(Opts)

-spec install(install_opts()) -> ok | {error, term()}.

Installs the logger integration with options. Options: - filter => true (default) - Adds trace context to all logs - handler => true - Installs a handler that formats and outputs logs - exporter => true - Installs a handler that sends logs to registered exporters - level => info (default) - Minimum level for handler

level_to_severity(_)

-spec level_to_severity(logger:level()) -> integer().

Maps Erlang logger level to OTel severity number.

level_to_severity_text(_)

-spec level_to_severity_text(logger:level()) -> binary().

Maps Erlang logger level to OTel severity text.

log(_, Config)

-spec log(logger:log_event(), logger:handler_config()) -> ok.

Logger handler callback. This is called when installed as a handler (not filter).

make_log_record(Level, Msg, Meta)

-spec make_log_record(logger:level(), term(), map()) ->
                         #log_record{timestamp :: integer() | undefined,
                                     observed_timestamp :: integer() | undefined,
                                     severity_number :: integer() | undefined,
                                     severity_text :: binary() | undefined,
                                     body :: term(),
                                     attributes :: map(),
                                     trace_id :: <<_:128>> | undefined,
                                     span_id :: <<_:64>> | undefined,
                                     trace_flags :: 0 | 1 | undefined,
                                     resource ::
                                         #resource{attributes :: map(),
                                                   schema_url :: binary() | undefined} |
                                         undefined,
                                     scope ::
                                         #scope{name :: binary(),
                                                version :: binary() | undefined,
                                                attributes :: map(),
                                                schema_url :: binary() | undefined} |
                                         undefined}.

Creates an OTel log record from a logger event.

uninstall()

-spec uninstall() -> ok.

Uninstalls the logger integration.