Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:25
erlang
0258-fix-logger_formatter-format-by-making-temp...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0258-fix-logger_formatter-format-by-making-templates-line.patch of Package erlang
From fe36d8b1c767691265f55b665910a0d60d9bfb7e Mon Sep 17 00:00:00 2001 From: gfngfn <suwa-takashi141@g.ecc.u-tokyo.ac.jp> Date: Tue, 31 May 2022 10:46:39 +0900 Subject: [PATCH] fix `logger_formatter:format` by making templates linear before split This modification is for fixing a strange behavior of the logger formatter about `msg` occurring at conditional branching in logger templates; see https://github.com/gfngfn/a_strange_behavior_of_logger_formatter for example. --- lib/kernel/src/logger_formatter.erl | 22 ++++++++++++++-------- lib/kernel/test/logger_formatter_SUITE.erl | 14 +++++++++++++- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/lib/kernel/src/logger_formatter.erl b/lib/kernel/src/logger_formatter.erl index 579b4f8f73..f64ec85b32 100644 --- a/lib/kernel/src/logger_formatter.erl +++ b/lib/kernel/src/logger_formatter.erl @@ -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))) -> diff --git a/lib/kernel/test/logger_formatter_SUITE.erl b/lib/kernel/test/logger_formatter_SUITE.erl index f1c64110a1..d160dce32f 100644 --- a/lib/kernel/test/logger_formatter_SUITE.erl +++ b/lib/kernel/test/logger_formatter_SUITE.erl @@ -272,7 +272,7 @@ template(_Config) -> [[nested,subkey]]), String8 = format(info,{"~p",[term]},Meta8,#{template=>Template8, single_line=>true}), - ct:log(String6), + ct:log(String8), SelfStr = pid_to_list(self()), RefStr8 = ref_to_list(Ref8), ListStr = "[list,\"string\",4321,#{},{tuple}]", @@ -345,6 +345,18 @@ template(_Config) -> _ -> ct:fail({full_nested_map_unexpected,MultipleKeysStr10}) end, + Meta11A = #{time=>Time,be_short=>ok}, + Meta11B = #{time=>Time}, + Template11 = + [{be_short, + ["short:",msg], + ["long:[",level,"]",msg]}], + String11A = format(info,{"~p",[term]},Meta11A,#{template=>Template11,single_line=>true}), + String11B = format(info,{"~p",[term]},Meta11B,#{template=>Template11,single_line=>true}), + ct:log(String11A), + ct:log(String11B), + {"short:term","long:[info]term"} = {String11A,String11B}, + ok. format_msg(_Config) -> -- 2.35.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor