Skip to content

Commit 8eef2e3

Browse files
committed
Refactors and cleans up OTEL's log handler usage
1 parent fd2f939 commit 8eef2e3

6 files changed

Lines changed: 14 additions & 89 deletions

File tree

Makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,5 +120,8 @@ distclean: clean-build-image
120120

121121
test: eunit common-test
122122

123+
dbg:
124+
$(REBAR) ct -v --suite=apps/hellgate/test/hg_invoice_tests_SUITE.erl --group=all_non_destructive_tests --case=payment_big_cascade_success
125+
123126
cover-report:
124127
$(REBAR) cover

apps/hellgate/src/hellgate.erl

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,10 @@ ensure_otel_log_handler() ->
134134
DelayMs = application:get_env(hellgate, otel_log_scheduled_delay_ms, 1000),
135135
TimeoutMs = application:get_env(hellgate, otel_log_exporting_timeout_ms, 300000),
136136
LogLevel = application:get_env(hellgate, otel_log_level, info),
137-
HandlerConfig = #{
138-
report_cb => fun hg_otel_log_filter:format_otp_report_utf8/1,
137+
LoggerHandlerConfig = #{
138+
level => LogLevel,
139+
filter_default => log,
140+
filters => [{hg_otel_trace_id_bytes, {fun hg_otel_log_filter:filter/2, undefined}}],
139141
exporter =>
140142
{otel_exporter_logs_otlp, #{
141143
protocol => http_protobuf,
@@ -145,13 +147,7 @@ ensure_otel_log_handler() ->
145147
scheduled_delay_ms => DelayMs,
146148
exporting_timeout_ms => TimeoutMs
147149
},
148-
LoggerHandlerConfig = #{
149-
level => LogLevel,
150-
filter_default => log,
151-
filters => [{hg_otel_trace_id_bytes, {fun hg_otel_log_filter:filter/2, undefined}}],
152-
config => HandlerConfig
153-
},
154-
case logger:add_handler(otel_logs, hg_otel_log_handler, LoggerHandlerConfig) of
150+
case logger:add_handler(otel_logs, otel_log_handler, LoggerHandlerConfig) of
155151
ok ->
156152
ok;
157153
{error, {already_exist, _}} ->
@@ -171,13 +167,8 @@ ensure_otel_log_handler() ->
171167
flush_otel_logs() ->
172168
case logger:get_handler_config(otel_logs) of
173169
{ok, HandlerCfg} ->
174-
Config = maps:get(config, HandlerCfg, #{}),
175-
DelayMs = maps:get(
176-
scheduled_delay_ms,
177-
Config,
178-
maps:get(scheduled_delay_ms, HandlerCfg, 1000)
179-
),
180-
_ = logger:info("otel_log_handler_flush"),
170+
_ = logger:info("Waiting for OTEL logs exporter to flush"),
171+
DelayMs = maps:get(scheduled_delay_ms, HandlerCfg, 1000),
181172
timer:sleep(erlang:min(?FLUSH_MAX_WAIT_MS, DelayMs + ?FLUSH_EXPORT_OVERHEAD_MS)),
182173
ok;
183174
_ ->

apps/hellgate/src/hg_otel_log_filter.erl

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,10 @@
66
-module(hg_otel_log_filter).
77

88
-export([filter/2]).
9-
-export([format_otp_report_utf8/1]).
109

1110
-spec filter(logger:log_event(), term()) -> logger:filter_return().
1211
filter(#{meta := Meta} = LogEvent, _FilterConfig) ->
13-
case convert_otel_ids(Meta) of
14-
Meta ->
15-
LogEvent;
16-
Meta1 ->
17-
LogEvent#{meta => Meta1}
18-
end.
12+
LogEvent#{meta := convert_otel_ids(Meta)}.
1913

2014
%% Конвертируем hex -> raw bytes только если формат hex (32/16 символов).
2115
%% OTLP LogRecord: trace_id=16 bytes, span_id=8 bytes.
@@ -30,22 +24,6 @@ convert_otel_ids(#{otel_trace_id := TraceIdHex, otel_span_id := SpanIdHex} = Met
3024
convert_otel_ids(Meta) ->
3125
Meta.
3226

33-
%% logger:format_otp_report/1 возвращает chardata (часто list()),
34-
%% из-за чего downstream JSON может сериализовать body как массив байт.
35-
%% Явно приводим к UTF-8 binary(), чтобы body в OTel/Loki был строкой.
36-
-spec format_otp_report_utf8(logger:report()) -> {unicode:chardata(), list()}.
37-
format_otp_report_utf8(Report) ->
38-
Bin =
39-
try logger:format_otp_report(Report) of
40-
{Format, Args} ->
41-
unicode:characters_to_binary(io_lib:format(Format, Args))
42-
catch
43-
_:_ ->
44-
%% Не даём report_cb падать: fallback в печатное представление отчёта.
45-
unicode:characters_to_binary(io_lib:format("~tp", [Report]))
46-
end,
47-
{"~ts", [Bin]}.
48-
4927
hex_to_trace_id_bytes(Hex) when is_binary(Hex), byte_size(Hex) =:= 32 ->
5028
try
5129
<<(binary_to_integer(Hex, 16)):128>>

apps/hellgate/src/hg_otel_log_handler.erl

Lines changed: 0 additions & 48 deletions
This file was deleted.

apps/hellgate/test/hg_invoice_tests_SUITE.erl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,7 @@ groups() ->
499499

500500
-spec init_per_suite(config()) -> config().
501501
init_per_suite(C) ->
502+
% ok = logger:set_primary_config(level, debug),
502503
% _ = dbg:tracer(),
503504
% _ = dbg:p(all, c),
504505
% _ = dbg:tpl({'hg_invoice_payment', 'p', '_'}, x),

rebar.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,12 @@
9191
0},
9292
{<<"opentelemetry_experimental">>,
9393
{git_subdir,"https://github.com/valitydev/opentelemetry-erlang.git",
94-
{ref,"685389b35fb188166e072c389a487a8e5a9f0804"},
94+
{ref,"ddf1efb45e3d2f334ff4b78f0d482f2ab9d32428"},
9595
"apps/opentelemetry_experimental"},
9696
0},
9797
{<<"opentelemetry_exporter">>,
9898
{git_subdir,"https://github.com/valitydev/opentelemetry-erlang.git",
99-
{ref,"685389b35fb188166e072c389a487a8e5a9f0804"},
99+
{ref,"ddf1efb45e3d2f334ff4b78f0d482f2ab9d32428"},
100100
"apps/opentelemetry_exporter"},
101101
0},
102102
{<<"parse_trans">>,{pkg,<<"parse_trans">>,<<"3.3.1">>},2},

0 commit comments

Comments
 (0)