Skip to content

Commit 8e86b3b

Browse files
committed
fix: clear logger process metadata
1 parent bf08e05 commit 8e86b3b

File tree

4 files changed

+28
-15
lines changed

4 files changed

+28
-15
lines changed

apps/opentelemetry/test/opentelemetry_SUITE.erl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -268,14 +268,14 @@ logger_metadata(_Config) ->
268268

269269
ok.
270270

271-
%% logger metadata will either be undefined, a map without the otel_span_ctx key or
272-
%% with the value of the key being undefined
271+
%% logger metadata will either be undefined, or a map without hex_span_ctx_keys:
272+
%% [otel_trace_id, otel_span_id, ,otel_trace_flags]
273273
empty_metadata() ->
274274
case logger:get_process_metadata() of
275275
undefined ->
276276
true;
277277
M ->
278-
maps:get(otel_span_ctx, M, #{}) =:= #{}
278+
maps:with(otel_span:hex_span_ctx_keys(), M) =:= #{}
279279
end.
280280

281281
propagator_configuration(_Config) ->

apps/opentelemetry_api/src/otel_ctx.erl

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,5 @@ text_map_injector(Key, ToText) ->
147147
text_map_injector_fun(TextMap, Key, ToText) ->
148148
TextMap ++ ToText(?MODULE:get_value(Key, undefined)).
149149

150-
%%
151-
152-
update_logger_process_metadata(undefined) ->
153-
ok;
154150
update_logger_process_metadata(Ctx) ->
155151
otel_tracer:update_logger_process_metadata(Ctx).

apps/opentelemetry_api/src/otel_span.erl

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
-export([trace_id/1,
2222
span_id/1,
2323
hex_span_ctx/1,
24+
hex_span_ctx_keys/0,
2425
hex_trace_id/1,
2526
hex_span_id/1,
2627
tracestate/1,
@@ -44,6 +45,9 @@
4445
-include_lib("opentelemetry_semantic_conventions/include/trace.hrl").
4546

4647
-define(is_recording(SpanCtx), SpanCtx =/= undefined andalso SpanCtx#span_ctx.is_recording =:= true).
48+
-define(OTEL_TRACE_ID, otel_trace_id).
49+
-define(OTEL_SPAN_ID, otel_span_id).
50+
-define(OTEL_TRACE_FLAGS, otel_trace_flags).
4751

4852
-type start_opts() :: #{attributes := opentelemetry:attributes_map(),
4953
links := [opentelemetry:link()],
@@ -100,18 +104,22 @@ span_id(#span_ctx{span_id=SpanId}) ->
100104
SpanId.
101105

102106
%% keys are prefixed with `otel_' because the main use of this function is logger metadata
103-
-spec hex_span_ctx(opentelemetry:span_ctx() | undefined) -> #{otel_trace_id := unicode:charlist(),
104-
otel_span_id := unicode:charlist(),
105-
otel_trace_flags := unicode:charlist()} | #{}.
107+
-spec hex_span_ctx(opentelemetry:span_ctx() | undefined) -> #{?OTEL_TRACE_ID := unicode:charlist(),
108+
?OTEL_SPAN_ID := unicode:charlist(),
109+
?OTEL_TRACE_FLAGS := unicode:charlist()} | #{}.
106110
hex_span_ctx(#span_ctx{trace_id=TraceId,
107111
span_id=SpanId,
108112
trace_flags=TraceFlags}) ->
109-
#{otel_trace_id => io_lib:format("~32.16.0b", [TraceId]),
110-
otel_span_id => io_lib:format("~16.16.0b", [SpanId]),
111-
otel_trace_flags => case TraceFlags band 1 of 1 -> "01"; _ -> "00" end};
113+
#{?OTEL_TRACE_ID => io_lib:format("~32.16.0b", [TraceId]),
114+
?OTEL_SPAN_ID => io_lib:format("~16.16.0b", [SpanId]),
115+
?OTEL_TRACE_FLAGS => case TraceFlags band 1 of 1 -> "01"; _ -> "00" end};
112116
hex_span_ctx(_) ->
113117
#{}.
114118

119+
-spec hex_span_ctx_keys() -> [atom()].
120+
hex_span_ctx_keys() ->
121+
[?OTEL_TRACE_ID, ?OTEL_SPAN_ID, ?OTEL_TRACE_FLAGS].
122+
115123
-spec hex_trace_id(opentelemetry:span_ctx()) -> opentelemetry:hex_trace_id().
116124
hex_trace_id(#span_ctx{trace_id=TraceId}) ->
117125
case otel_utils:format_binary_string("~32.16.0b", [TraceId]) of

apps/opentelemetry_api/src/otel_tracer.erl

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,17 @@ current_span_ctx(Ctx) ->
127127
update_logger_process_metadata(Ctx) ->
128128
update_logger_process_metadata_from_span_ctx(current_span_ctx(Ctx)).
129129

130-
%%
131-
130+
%% If the (previous) context is undefined, logger process metadata must be cleared
131+
update_logger_process_metadata_from_span_ctx(undefined) ->
132+
clear_logger_proces_metadata();
132133
update_logger_process_metadata_from_span_ctx(SpanCtx) ->
133134
Metadata = otel_span:hex_span_ctx(SpanCtx),
134135
logger:update_process_metadata(Metadata).
136+
137+
clear_logger_proces_metadata() ->
138+
case logger:get_process_metadata() of
139+
M when is_map(M) ->
140+
logger:set_process_metadata(maps:without(otel_span:hex_span_ctx_keys(), M));
141+
_ ->
142+
ok
143+
end.

0 commit comments

Comments
 (0)