Skip to content

Commit cc8d932

Browse files
committed
Do not override span_id with otel value by default
This is done to prevent breaking of behavior for people that have both set and already rely for regular span_id to be logged to DD.
1 parent 314b173 commit cc8d932

File tree

2 files changed

+27
-8
lines changed

2 files changed

+27
-8
lines changed

lib/logger_json/formatters/datadog_logger.ex

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,14 @@ defmodule LoggerJSON.Formatters.DatadogLogger do
7272
# To connect logs and traces, span_id and trace_id keys are respectively dd.span_id and dd.trace_id
7373
# https://docs.datadoghq.com/tracing/faq/why-cant-i-see-my-correlated-logs-in-the-trace-id-panel/?tab=jsonlogs
7474
defp convert_tracing_keys(output, md) do
75-
fields = %{
76-
span_id: ["dd.span_id", & &1],
77-
trace_id: ["dd.trace_id", & &1],
78-
otel_span_id: ["dd.span_id", &convert_otel_field/1],
79-
otel_trace_id: ["dd.trace_id", &convert_otel_field/1]
80-
}
81-
82-
Enum.reduce(fields, output, fn {key, [new_key, transformer]}, acc ->
75+
# Notice: transformers can override each others but the last one in this list wins
76+
[
77+
otel_span_id: {"dd.span_id", &convert_otel_field/1},
78+
otel_trace_id: {"dd.trace_id", &convert_otel_field/1},
79+
span_id: {"dd.span_id", & &1},
80+
trace_id: {"dd.trace_id", & &1}
81+
]
82+
|> Enum.reduce(output, fn {key, {new_key, transformer}}, acc ->
8383
if Keyword.has_key?(md, key) do
8484
new_value = transformer.(Keyword.get(md, key))
8585
Map.put(acc, new_key, new_value)

test/unit/logger_json/formatters/datadog_logger_test.exs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,25 @@ defmodule LoggerJSONDatadogTest do
224224
assert Map.has_key?(log, "span_id") == false
225225
end
226226

227+
test "trace_id/span_id has greater priority than otel_trace_id/otel_span_id" do
228+
Logger.configure_backend(LoggerJSON, metadata: :all)
229+
230+
otel_id =
231+
<<98, 56, 49, 48, 100, 98, 97, 50, 57, 56, 48, 51, 101, 101, 54, 49, 101, 55, 99, 55, 49, 102, 102, 48, 99, 50,
232+
99, 57, 53, 97, 57, 100>>
233+
234+
Logger.metadata(otel_trace_id: otel_id, trace_id: "1", span_id: "2", otel_span_id: otel_id)
235+
236+
log =
237+
fn -> Logger.debug("hello") end
238+
|> capture_log()
239+
|> Jason.decode!()
240+
241+
assert %{"dd.trace_id" => "1", "dd.span_id" => "2"} = log
242+
assert Map.has_key?(log, "trace_id") == false
243+
assert Map.has_key?(log, "span_id") == false
244+
end
245+
227246
test "convert otel_trace_id/otel_span_id binary to expected datadog keys" do
228247
Logger.configure_backend(LoggerJSON, metadata: :all)
229248

0 commit comments

Comments
 (0)