Packages
Adds OpenTelemetry trace identifiers to logs
Current section
Files
Jump to
Current section
Files
lib/opentelemetry_logger_metadata.ex
defmodule OpentelemetryLoggerMetadata do
@moduledoc """
Documentation for OpentelemetryLoggerMetadata.
"""
def setup do
:logger.add_primary_filter(:opentelemetry_logger_metadata, {&filter/2, []})
end
def filter(log_event, _config) do
ctx = OpenTelemetry.Tracer.current_span_ctx()
if ctx == :undefined do
# Pass the unmodified log event to the next filters
:ignore
else
trace_id = OpenTelemetry.Span.trace_id(ctx)
span_id = OpenTelemetry.Span.span_id(ctx)
# Can be simplified after https://github.com/open-telemetry/opentelemetry-erlang/pull/270
hex_trace_id = :erlang.iolist_to_binary(:io_lib.format("~32.16.0b", [trace_id]))
hex_span_id = :erlang.iolist_to_binary(:io_lib.format("~16.16.0b", [span_id]))
Map.update(log_event, :meta, %{}, fn meta ->
meta
|> Map.put(:trace_id, hex_trace_id)
|> Map.put(:span_id, hex_span_id)
end)
end
end
end