diff options
Diffstat (limited to 'lib/kernel/src/logger_formatter.erl')
-rw-r--r-- | lib/kernel/src/logger_formatter.erl | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/lib/kernel/src/logger_formatter.erl b/lib/kernel/src/logger_formatter.erl index 579b4f8f73..75d85de744 100644 --- a/lib/kernel/src/logger_formatter.erl +++ b/lib/kernel/src/logger_formatter.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2017-2020. All Rights Reserved. +%% Copyright Ericsson AB 2017-2023. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -48,7 +48,8 @@ format(#{level:=Level,msg:=Msg0,meta:=Meta},Config0) Config = add_default_config(Config0), Meta1 = maybe_add_legacy_header(Level,Meta,Config), Template = maps:get(template,Config), - {BT,AT0} = lists:splitwith(fun(msg) -> false; (_) -> true end, Template), + LinearTemplate = linearize_template(Meta1,Template), + {BT,AT0} = lists:splitwith(fun(msg) -> false; (_) -> true end, LinearTemplate), {DoMsg,AT} = case AT0 of [msg|Rest] -> {true,Rest}; @@ -89,6 +90,18 @@ format(#{level:=Level,msg:=Msg0,meta:=Meta},Config0) end, truncate(B,MsgStr,A,maps:get(max_size,Config)). +linearize_template(Data,[{Key,IfExist,Else}|Format]) -> + BranchForUse = + case value(Key,Data) of + {ok,_Value} -> linearize_template(Data,IfExist); + error -> linearize_template(Data,Else) + end, + BranchForUse ++ linearize_template(Data,Format); +linearize_template(Data,[StrOrKey|Format]) -> + [StrOrKey|linearize_template(Data,Format)]; +linearize_template(_Data,[]) -> + []. + trim([H|T],Rev) when H==$\s; H==$\r; H==$\n -> trim(T,Rev); trim([H|T],false) when is_list(H) -> @@ -110,13 +123,6 @@ trim(String,_) -> do_format(Level,Data,[level|Format],Config) -> [to_string(level,Level,Config)|do_format(Level,Data,Format,Config)]; -do_format(Level,Data,[{Key,IfExist,Else}|Format],Config) -> - String = - case value(Key,Data) of - {ok,Value} -> do_format(Level,Data#{Key=>Value},IfExist,Config); - error -> do_format(Level,Data,Else,Config) - end, - [String|do_format(Level,Data,Format,Config)]; do_format(Level,Data,[Key|Format],Config) when is_atom(Key) orelse (is_list(Key) andalso is_atom(hd(Key))) -> |