instrument_logger (instrument v0.6.1)
View SourceErlang 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
-type install_opts() :: #{handler => boolean(), filter => boolean(), exporter => boolean(), level => logger:level()}.
Functions
Adds trace context to a metadata map. This can be used manually if you prefer not to install the filter.
-spec emit(term()) -> ok.
Emits a log record with trace context.
-spec emit(logger:level(), term()) -> ok.
Emits a log record at the specified level with trace context.
-spec filter_config(logger:filter_arg()) -> logger:filter_return().
Filter config callback for logger.
-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.
-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
-spec level_to_severity(logger:level()) -> integer().
Maps Erlang logger level to OTel severity number.
-spec level_to_severity_text(logger:level()) -> binary().
Maps Erlang logger level to OTel severity text.
-spec log(logger:log_event(), logger:handler_config()) -> ok.
Logger handler callback. This is called when installed as a handler (not filter).
-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.
-spec uninstall() -> ok.
Uninstalls the logger integration.