From 5b48b06d4a2178b474561ca070f0dccd9fb88be0 Mon Sep 17 00:00:00 2001 From: Serge Tupchii Date: Mon, 26 Feb 2024 14:17:36 +0200 Subject: [PATCH] fix: trace throttled log events --- apps/emqx/include/logger.hrl | 13 +++++++++---- apps/emqx/src/emqx_trace/emqx_trace_formatter.erl | 4 +++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/apps/emqx/include/logger.hrl b/apps/emqx/include/logger.hrl index 59285e9d5..313358bcd 100644 --- a/apps/emqx/include/logger.hrl +++ b/apps/emqx/include/logger.hrl @@ -51,7 +51,7 @@ true -> ?SLOG(Level, Data, Meta); false -> - ok + ?_DO_TRACE(Level, maps:get(msg, Data), maps:merge(Data, Meta)) end ). @@ -61,8 +61,8 @@ -define(TRACE(Tag, Msg, Meta), ?TRACE(debug, Tag, Msg, Meta)). -%% Only evaluate when necessary --define(TRACE(Level, Tag, Msg, Meta), begin +%% Internal macro +-define(_DO_TRACE(Tag, Msg, Meta), case persistent_term:get(?TRACE_FILTER, []) of [] -> ok; %% We can't bind filter list to a variable because we pollute the calling scope with it. @@ -70,7 +70,12 @@ %% because this adds overhead to the happy path. %% So evaluate `persistent_term:get` twice. _ -> emqx_trace:log(persistent_term:get(?TRACE_FILTER, []), Msg, (Meta)#{trace_tag => Tag}) - end, + end +). + +%% Only evaluate when necessary +-define(TRACE(Level, Tag, Msg, Meta), begin + ?_DO_TRACE(Tag, Msg, Meta), ?SLOG( Level, (emqx_trace_formatter:format_meta_map(Meta))#{msg => Msg, tag => Tag}, diff --git a/apps/emqx/src/emqx_trace/emqx_trace_formatter.erl b/apps/emqx/src/emqx_trace/emqx_trace_formatter.erl index 4dd22966b..6cbcc0510 100644 --- a/apps/emqx/src/emqx_trace/emqx_trace_formatter.erl +++ b/apps/emqx/src/emqx_trace/emqx_trace_formatter.erl @@ -35,7 +35,9 @@ format( ClientId = to_iolist(maps:get(clientid, Meta, "")), Peername = maps:get(peername, Meta, ""), MetaBin = format_meta(Meta, PEncode), - [Time, " [", Tag, "] ", ClientId, "@", Peername, " msg: ", Msg, ", ", MetaBin, "\n"]; + Msg1 = to_iolist(Msg), + Tag1 = to_iolist(Tag), + [Time, " [", Tag1, "] ", ClientId, "@", Peername, " msg: ", Msg1, ", ", MetaBin, "\n"]; format(Event, Config) -> emqx_logger_textfmt:format(Event, Config).