From 683974e1c855797c0f6aa02a4bf9d9385b8a6c5b Mon Sep 17 00:00:00 2001 From: Zaiming Shi Date: Sat, 31 Jul 2021 21:25:00 +0200 Subject: [PATCH] refactor(log/textfmt): print mfa metadata in text formatter --- apps/emqx/include/logger.hrl | 9 ++++--- apps/emqx/src/emqx_logger_jsonfmt.erl | 2 +- apps/emqx/src/emqx_logger_textfmt.erl | 36 +++++++++++++-------------- 3 files changed, 24 insertions(+), 23 deletions(-) diff --git a/apps/emqx/include/logger.hrl b/apps/emqx/include/logger.hrl index 80799179f..2c5bea89f 100644 --- a/apps/emqx/include/logger.hrl +++ b/apps/emqx/include/logger.hrl @@ -47,9 +47,7 @@ case logger:allow(Level, ?MODULE) of true -> logger:log(Level, (Format), (Args), - (Meta)#{ mfa => <<(atom_to_binary(?MODULE, utf8))/binary, $:, - (atom_to_binary(?FUNCTION_NAME, utf8))/binary, $/, - (integer_to_binary(?FUNCTION_ARITY))/binary>> + (Meta)#{ mfa => {?MODULE, ?FUNCTION_NAME, ?FUNCTION_ARITY} , line => ?LINE }); false -> @@ -58,4 +56,9 @@ -define(LOG(Level, Format, Args), ?LOG(Level, Format, Args, #{})). +%% structured logging +-define(SLOG(Level, Data), + logger:log(Level, Data, #{ mfa => {?MODULE, ?FUNCTION_NAME, ?FUNCTION_ARITY} + , line => ?LINE})). + -endif. diff --git a/apps/emqx/src/emqx_logger_jsonfmt.erl b/apps/emqx/src/emqx_logger_jsonfmt.erl index 5d9094c51..387c9b4c3 100644 --- a/apps/emqx/src/emqx_logger_jsonfmt.erl +++ b/apps/emqx/src/emqx_logger_jsonfmt.erl @@ -219,7 +219,7 @@ json_obj(Data, Config) -> json_kv(K, V, D, Config) end, maps:new(), Data). -json_kv(mfa, {M, F, A}, Data, _Config) -> %% snabbkaffe +json_kv(mfa, {M, F, A}, Data, _Config) -> maps:put(mfa, <<(atom_to_binary(M, utf8))/binary, $:, (atom_to_binary(F, utf8))/binary, $/, (integer_to_binary(A))/binary>>, Data); diff --git a/apps/emqx/src/emqx_logger_textfmt.erl b/apps/emqx/src/emqx_logger_textfmt.erl index eae637e4d..97862a72a 100644 --- a/apps/emqx/src/emqx_logger_textfmt.erl +++ b/apps/emqx/src/emqx_logger_textfmt.erl @@ -19,26 +19,24 @@ -export([format/2]). -export([check_config/1]). -%% metadata fields which we do not wish to merge into log data --define(WITHOUT_MERGE, - [ report_cb % just a callback - , time % formatted as a part of templated message - , peername % formatted as a part of templated message - , clientid % formatted as a part of templated message - , gl % not interesting - , file - ]). - check_config(X) -> logger_formatter:check_config(X). -format(#{msg := Msg0, meta := Meta} = Event, Config) -> - Msg = maybe_merge(Msg0, Meta), - logger_formatter:format(Event#{msg := Msg}, Config). +format(#{msg := {report, Report}, meta := Meta} = Event, Config) when is_map(Report) -> + logger_formatter:format(Event#{msg := {report, enrich(Report, Meta)}}, Config); +format(#{msg := {Fmt, Args}, meta := Meta} = Event, Config) when is_list(Fmt) -> + {NewFmt, NewArgs} = enrich_fmt(Fmt, Args, Meta), + logger_formatter:format(Event#{msg := {NewFmt, NewArgs}}, Config). -maybe_merge({report, Report}, Meta) when is_map(Report) -> - {report, maps:merge(Report, filter(Meta))}; -maybe_merge(Report, _Meta) -> - Report. +enrich(Report, #{mfa := Mfa, line := Line}) -> + Report#{mfa => mfa(Mfa), line => Line}; +enrich(Report, _) -> Report. -filter(Meta) -> - maps:without(?WITHOUT_MERGE, Meta). +enrich_fmt(Fmt, Args, #{mfa := Mfa, line := Line}) -> + {Fmt ++ " mfa: ~s line: ~w", Args ++ [mfa(Mfa), Line]}; +enrich_fmt(Fmt, Args, _) -> + {Fmt, Args}. + +mfa({M, F, A}) -> + <<(atom_to_binary(M, utf8))/binary, $:, + (atom_to_binary(F, utf8))/binary, $/, + (integer_to_binary(A))/binary>>.