@@ -43,7 +43,7 @@ format(#{msg:={report, #{format:=Format, args:=Args, label:={error_logger, _}}}}
4343 Report = #{text => io_lib :format (Format , Args )},
4444 format (Map #{msg := {report , Report }}, Config );
4545format (#{level := Level , msg := {report , Msg }, meta := Meta }, Config ) when is_map (Msg ) ->
46- Data0 = maps : merge (Msg , Meta #{level => Level }),
46+ Data0 = merge_meta (Msg , Meta #{level => Level }, Config ),
4747 Data1 = apply_key_mapping (Data0 , Config ),
4848 Data2 = apply_format_funs (Data1 , Config ),
4949 encode (pre_encode (Data2 , Config ), Config );
@@ -75,6 +75,11 @@ pre_encode(Data, Config) ->
7575 maps :new (),
7676 Data ).
7777
78+ merge_meta (Msg , Meta0 , Config ) ->
79+ Meta1 = meta_without (Meta0 , Config ),
80+ Meta2 = meta_with (Meta1 , Config ),
81+ maps :merge (Msg , Meta2 ).
82+
7883encode (Data , Config ) ->
7984 Json = jsx :encode (Data ),
8085 case new_line (Config ) of
@@ -121,6 +126,15 @@ apply_key_mapping(Data, _) ->
121126
122127new_line (Config ) -> maps :get (new_line , Config , ? NEW_LINE ).
123128
129+ meta_without (Meta , Config ) ->
130+ maps :without (maps :get (meta_without , Config , [report_cb ]), Meta ).
131+
132+ meta_with (Meta , #{ meta_with := Ks }) ->
133+ maps :with (Ks , Meta );
134+ meta_with (Meta , _ConfigNotPresent ) ->
135+ Meta .
136+
137+
124138% %%_* Tests ============================================================
125139-ifdef (TEST ).
126140-include_lib (" eunit/include/eunit.hrl" ).
@@ -171,6 +185,38 @@ list_format_test() ->
171185 ? assertEqual ( <<" {\" level\" :\" error\" ,\" report\" :\" [{hej,\\\" hopp\\\" }]\" ,\" time\" :1}" >>
172186 , format (ErrorReport , #{})).
173187
188+ meta_without_test () ->
189+ Error = #{ level => info
190+ , msg => {report , #{answer => 42 }}
191+ , meta => #{secret => xyz }},
192+ ? assertEqual ([ {<<" answer" >>, 42 }
193+ , {<<" level" >>, <<" info" >>}
194+ , {<<" secret" >>, <<" xyz" >>}
195+ ],
196+ jsx :decode (format (Error , #{}))),
197+ Config2 = #{ meta_without => [secret ]},
198+ ? assertEqual ([ {<<" answer" >>, 42 }
199+ , {<<" level" >>, <<" info" >>}
200+ ],
201+ jsx :decode (format (Error , Config2 ))),
202+ ok .
203+
204+ meta_with_test () ->
205+ Error = #{ level => info
206+ , msg => {report , #{answer => 42 }}
207+ , meta => #{secret => xyz }},
208+ ? assertEqual ([ {<<" answer" >>, 42 }
209+ , {<<" level" >>, <<" info" >>}
210+ , {<<" secret" >>, <<" xyz" >>}
211+ ],
212+ jsx :decode (format (Error , #{}))),
213+ Config2 = #{ meta_with => [level ]},
214+ ? assertEqual ([ {<<" answer" >>, 42 }
215+ , {<<" level" >>, <<" info" >>}
216+ ],
217+ jsx :decode (format (Error , Config2 ))),
218+ ok .
219+
174220-endif .
175221
176222% %%_* Emacs ============================================================
0 commit comments