This is an automated email from the ASF dual-hosted git repository. iilyak pushed a commit to branch clean-up-logs-3.x.v2 in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 5e54ec714d9be6c84e3372e09a6f31ab80d46da0 Author: ILYA Khlopotov <[email protected]> AuthorDate: Tue Mar 16 08:43:27 2021 -0700 Revert "Add support for pluguable sanitizer module for logger" This reverts commit eb9cfc8ee88d56e68e1d9c7b97e00403cddc4644. --- src/couch_log/src/couch_log_config.erl | 8 +- src/couch_log/src/couch_log_config_dyn.erl | 3 +- src/couch_log/src/couch_log_formatter.erl | 262 ++++++--------------- src/couch_log/src/couch_log_sup.erl | 2 - src/couch_log/test/eunit/couch_log_config_test.erl | 17 +- .../test/eunit/couch_log_formatter_test.erl | 135 ----------- 6 files changed, 77 insertions(+), 350 deletions(-) diff --git a/src/couch_log/src/couch_log_config.erl b/src/couch_log/src/couch_log_config.erl index 1d7452d..a7a469c 100644 --- a/src/couch_log/src/couch_log_config.erl +++ b/src/couch_log/src/couch_log_config.erl @@ -50,8 +50,7 @@ entries() -> {level, "level", "info"}, {level_int, "level", "info"}, {max_message_size, "max_message_size", "16000"}, - {strip_last_msg, "strip_last_msg", "true"}, - {sanitizer_module, "sanitizer_module", "undefined"} + {strip_last_msg, "strip_last_msg", "true"} ]. @@ -105,7 +104,4 @@ transform(strip_last_msg, "false") -> false; transform(strip_last_msg, _) -> - true; - -transform(sanitizer_module, ModuleStr) -> - list_to_atom(ModuleStr). \ No newline at end of file + true. \ No newline at end of file diff --git a/src/couch_log/src/couch_log_config_dyn.erl b/src/couch_log/src/couch_log_config_dyn.erl index 731ab84..b39dcf2 100644 --- a/src/couch_log/src/couch_log_config_dyn.erl +++ b/src/couch_log/src/couch_log_config_dyn.erl @@ -26,5 +26,4 @@ get(level) -> info; get(level_int) -> 2; get(max_message_size) -> 16000; -get(strip_last_msg) -> true; -get(sanitizer_module) -> undefined. +get(strip_last_msg) -> true. diff --git a/src/couch_log/src/couch_log_formatter.erl b/src/couch_log/src/couch_log_formatter.erl index c90f0d0..26997a8 100644 --- a/src/couch_log/src/couch_log_formatter.erl +++ b/src/couch_log/src/couch_log_formatter.erl @@ -68,51 +68,44 @@ format(Event) -> do_format({error, _GL, {Pid, "** Generic server " ++ _, Args}}) -> %% gen_server terminate - [Name, LastMsg0, State0, Reason | Extra] = Args, + [Name, LastMsg0, State, Reason | Extra] = Args, LastMsg = case couch_log_config:get(strip_last_msg) of true -> redacted; false -> LastMsg0 end, - Opts = ctx_opts(gen_server, State0), - State = format_state(State0, Opts), MsgFmt = "gen_server ~w terminated with reason: ~s~n" ++ " last msg: ~p~n state: ~p~n extra: ~p", - MsgArgs = [Name, format_reason(Reason, Opts), LastMsg, State, Extra], + MsgArgs = [Name, format_reason(Reason), LastMsg, State, Extra], format(error, Pid, MsgFmt, MsgArgs); do_format({error, _GL, {Pid, "** State machine " ++ _, Args}}) -> %% gen_fsm terminate - [Name, LastMsg0, StateName, State0, Reason | Extra] = Args, + [Name, LastMsg0, StateName, State, Reason | Extra] = Args, LastMsg = case couch_log_config:get(strip_last_msg) of true -> redacted; false -> LastMsg0 end, - Opts = ctx_opts(gen_fsm, State0), - State = format_state(State0, Opts), MsgFmt = "gen_fsm ~w in state ~w terminated with reason: ~s~n" ++ " last msg: ~p~n state: ~p~n extra: ~p", - MsgArgs = [Name, StateName, format_reason(Reason, Opts), - LastMsg, State, Extra], + MsgArgs = [Name, StateName, format_reason(Reason), LastMsg, State, Extra], format(error, Pid, MsgFmt, MsgArgs); do_format({error, _GL, {Pid, "** gen_event handler" ++ _, Args}}) -> %% gen_event handler terminate - [ID, Name, LastMsg0, State0, Reason] = Args, + [ID, Name, LastMsg0, State, Reason] = Args, LastMsg = case couch_log_config:get(strip_last_msg) of true -> redacted; false -> LastMsg0 end, - Opts = ctx_opts(gen_event, State0), - State = format_state(State0, Opts), MsgFmt = "gen_event ~w installed in ~w terminated with reason: ~s~n" ++ " last msg: ~p~n state: ~p", - MsgArgs = [ID, Name, format_reason(Reason, Opts), LastMsg, State], + MsgArgs = [ID, Name, format_reason(Reason), LastMsg, State], format(error, Pid, MsgFmt, MsgArgs); do_format({error, _GL, {emulator, "~s~n", [Msg]}}) when is_list(Msg) -> @@ -132,14 +125,13 @@ do_format({error_report, _GL, {Pid, supervisor_report, D}}) -> case lists:sort(D) of [{errorContext, Ctx}, {offender, Off}, {reason, Reason}, {supervisor, Name}] -> - Opts = ctx_opts(supervisor, Off), - Offender = format_offender(Off, Opts), + Offender = format_offender(Off), MsgFmt = "Supervisor ~w had child ~s exit " ++ "with reason ~s in context ~w", Args = [ supervisor_name(Name), Offender, - format_reason(Reason, Opts), + format_reason(Reason), Ctx ], format(error, Pid, MsgFmt, Args); @@ -163,9 +155,8 @@ do_format({info_msg, _GL, {Pid, Fmt, Args}}) -> do_format({info_report, _GL, {Pid, std_info, D}}) when is_list(D) -> case lists:sort(D) of [{application, App}, {exited, Reason}, {type, _Type}] -> - Opts = ctx_opts(application, App), MsgFmt = "Application ~w exited with reason: ~s", - format(info, Pid, MsgFmt, [App, format_reason(Reason, Opts)]); + format(info, Pid, MsgFmt, [App, format_reason(Reason)]); _ -> format(info, Pid, print_silly_list(D)) end; @@ -179,8 +170,7 @@ do_format({info_report, _GL, {Pid, progress, D}}) -> MsgFmt = "Application ~w started on node ~w", format(info, Pid, MsgFmt, [App, Node]); [{started, Started}, {supervisor, Name}] -> - Opts = ctx_opts(supervisor_progress, Started), - MFA = format_mfa(get_value(mfargs, Started), Opts), + MFA = format_mfa(get_value(mfargs, Started)), ChildPid = get_value(pid, Started), MsgFmt = "Supervisor ~w started ~s at pid ~w", format(debug, Pid, MsgFmt, [supervisor_name(Name), MFA, ChildPid]); @@ -193,7 +183,6 @@ do_format(Event) -> format_crash_report(Report, Neighbours) -> - Opts = ctx_opts(crash_report, Report), Pid = get_value(pid, Report), Name = case get_value(registered_name, Report) of undefined -> @@ -202,7 +191,7 @@ format_crash_report(Report, Neighbours) -> io_lib:format("~s (~w)", [Atom, Pid]) end, {Class, Reason, Trace} = get_value(error_info, Report), - ReasonStr = format_reason({Reason, Trace}, Opts), + ReasonStr = format_reason({Reason, Trace}), Type = case Class of exit -> "exited"; _ -> "crashed" @@ -218,7 +207,7 @@ format_crash_report(Report, Neighbours) -> end. -format_offender(Off, Opts) -> +format_offender(Off) -> case get_value(mfargs, Off) of undefined -> %% supervisor_bridge @@ -226,7 +215,7 @@ format_offender(Off, Opts) -> io_lib:format("at module ~w at ~w", Args); MFArgs -> %% regular supervisor - MFA = format_mfa(MFArgs, Opts), + MFA = format_mfa(MFArgs), %% In 2014 the error report changed from `name' to %% `id', so try that first. @@ -240,59 +229,57 @@ format_offender(Off, Opts) -> io_lib:format("~p started with ~s at ~w", Args) end. -format_reason(Reason) -> - format_reason(Reason, #{}). -format_reason({'function not exported', [{M, F, A} | Trace]}, Opts) -> - ["call to unexported function ", format_mfa({M, F, A}, Opts), +format_reason({'function not exported', [{M, F, A} | Trace]}) -> + ["call to unexported function ", format_mfa({M, F, A}), " at ", format_trace(Trace)]; -format_reason({'function not exported' = C, [{M, F, A, _Props} | Rest]}, Opts) -> +format_reason({'function not exported' = C, [{M, F, A, _Props} | Rest]}) -> %% Drop line number from undefined function - format_reason({C, [{M, F, A} | Rest]}, Opts); + format_reason({C, [{M, F, A} | Rest]}); -format_reason({undef, [MFA | Trace]}, Opts) -> - ["call to undefined function ", format_mfa(MFA, Opts), +format_reason({undef, [MFA | Trace]}) -> + ["call to undefined function ", format_mfa(MFA), " at ", format_trace(Trace)]; -format_reason({bad_return, {MFA, Val}}, Opts) -> - ["bad return value ", print_val(Val, Opts), " from ", format_mfa(MFA, Opts)]; +format_reason({bad_return, {MFA, Val}}) -> + ["bad return value ", print_val(Val), " from ", format_mfa(MFA)]; -format_reason({bad_return_value, Val}, Opts) -> - ["bad return value ", print_val(Val, Opts)]; +format_reason({bad_return_value, Val}) -> + ["bad return value ", print_val(Val)]; -format_reason({{bad_return_value, Val}, MFA}, Opts) -> - ["bad return value ", print_val(Val, Opts), " at ", format_mfa(MFA, Opts)]; +format_reason({{bad_return_value, Val}, MFA}) -> + ["bad return value ", print_val(Val), " at ", format_mfa(MFA)]; -format_reason({{badrecord, Record}, Trace}, Opts) -> - ["bad record ", print_val(Record, Opts), " at ", format_trace(Trace)]; +format_reason({{badrecord, Record}, Trace}) -> + ["bad record ", print_val(Record), " at ", format_trace(Trace)]; -format_reason({{case_clause, Val}, Trace}, Opts) -> - ["no case clause matching ", print_val(Val, Opts), " at ", format_trace(Trace)]; +format_reason({{case_clause, Val}, Trace}) -> + ["no case clause matching ", print_val(Val), " at ", format_trace(Trace)]; -format_reason({function_clause, [MFA | Trace]}, Opts) -> - ["no function clause matching ", format_mfa(MFA, Opts), +format_reason({function_clause, [MFA | Trace]}) -> + ["no function clause matching ", format_mfa(MFA), " at ", format_trace(Trace)]; -format_reason({if_clause, Trace}, _Opts) -> +format_reason({if_clause, Trace}) -> ["no true branch found while evaluating if expression at ", format_trace(Trace)]; -format_reason({{try_clause, Val}, Trace}, Opts) -> - ["no try clause matching ", print_val(Val, Opts), " at ", format_trace(Trace)]; +format_reason({{try_clause, Val}, Trace}) -> + ["no try clause matching ", print_val(Val), " at ", format_trace(Trace)]; -format_reason({badarith, Trace}, _Opts) -> +format_reason({badarith, Trace}) -> ["bad arithmetic expression at ", format_trace(Trace)]; -format_reason({{badmatch, Val}, Trace}, Opts) -> - ["no match of right hand value ", print_val(Val, Opts), +format_reason({{badmatch, Val}, Trace}) -> + ["no match of right hand value ", print_val(Val), " at ", format_trace(Trace)]; -format_reason({emfile, Trace}, _Opts) -> +format_reason({emfile, Trace}) -> ["maximum number of file descriptors exhausted, check ulimit -n; ", format_trace(Trace)]; -format_reason({system_limit, [{M, F, A} | Trace]}, Opts) -> +format_reason({system_limit, [{M, F, A} | Trace]}) -> Limit = case {M, F} of {erlang, open_port} -> "maximum number of ports exceeded"; @@ -305,71 +292,68 @@ format_reason({system_limit, [{M, F, A} | Trace]}, Opts) -> {ets, new} -> "maximum number of ETS tables exceeded"; _ -> - format_mfa({M, F, A}, Opts) + format_mfa({M, F, A}) end, ["system limit: ", Limit, " at ", format_trace(Trace)]; -format_reason({badarg, [MFA | Trace]}, Opts) -> - ["bad argument in call to ", format_mfa(MFA, Opts), +format_reason({badarg, [MFA | Trace]}) -> + ["bad argument in call to ", format_mfa(MFA), " at ", format_trace(Trace)]; -format_reason({{badarg, Stack}, _}, Opts) -> - format_reason({badarg, Stack}, Opts); +format_reason({{badarg, Stack}, _}) -> + format_reason({badarg, Stack}); -format_reason({{badarity, {Fun, Args}}, Trace}, _Opts) -> +format_reason({{badarity, {Fun, Args}}, Trace}) -> {arity, Arity} = lists:keyfind(arity, 1, erlang:fun_info(Fun)), MsgFmt = "function called with wrong arity of ~w instead of ~w at ", [io_lib:format(MsgFmt, [length(Args), Arity]), format_trace(Trace)]; -format_reason({noproc, MFA}, Opts) -> - ["no such process or port in call to ", format_mfa(MFA, Opts)]; +format_reason({noproc, MFA}) -> + ["no such process or port in call to ", format_mfa(MFA)]; -format_reason({{badfun, Term}, Trace}, Opts) -> - ["bad function ", print_val(Term, Opts), " called at ", format_trace(Trace)]; +format_reason({{badfun, Term}, Trace}) -> + ["bad function ", print_val(Term), " called at ", format_trace(Trace)]; -format_reason({Reason, [{M, F, A} | _] = Trace}, Opts) +format_reason({Reason, [{M, F, A} | _] = Trace}) when is_atom(M), is_atom(F), is_integer(A) -> - [format_reason(Reason, Opts), " at ", format_trace(Trace)]; + [format_reason(Reason), " at ", format_trace(Trace)]; -format_reason({Reason, [{M, F, A} | _] = Trace}, Opts) +format_reason({Reason, [{M, F, A} | _] = Trace}) when is_atom(M), is_atom(F), is_list(A) -> - [format_reason(Reason, Opts), " at ", format_trace(Trace)]; + [format_reason(Reason), " at ", format_trace(Trace)]; -format_reason({Reason, [{M, F, A, Props} | _] = Trace}, Opts) +format_reason({Reason, [{M, F, A, Props} | _] = Trace}) when is_atom(M), is_atom(F), is_integer(A), is_list(Props) -> - [format_reason(Reason, Opts), " at ", format_trace(Trace)]; + [format_reason(Reason), " at ", format_trace(Trace)]; -format_reason({Reason, [{M, F, A, Props} | _] = Trace}, Opts) +format_reason({Reason, [{M, F, A, Props} | _] = Trace}) when is_atom(M), is_atom(F), is_list(A), is_list(Props) -> - [format_reason(Reason, Opts), " at ", format_trace(Trace)]; + [format_reason(Reason), " at ", format_trace(Trace)]; -format_reason(Reason, Opts) -> - {Str, _} = couch_log_trunc_io:print(maybe_sanitize_reason(Reason, Opts), 500), +format_reason(Reason) -> + {Str, _} = couch_log_trunc_io:print(Reason, 500), Str. -format_mfa(MFA) -> - format_mfa(MFA, #{}). - -format_mfa({M, F, A}, Opts) when is_list(A) -> - {FmtStr, Args} = format_args(A, [], [], Opts), +format_mfa({M, F, A}) when is_list(A) -> + {FmtStr, Args} = format_args(A, [], []), io_lib:format("~w:~w(" ++ FmtStr ++ ")", [M, F | Args]); -format_mfa({M, F, A}, _Opts) when is_integer(A) -> +format_mfa({M, F, A}) when is_integer(A) -> io_lib:format("~w:~w/~w", [M, F, A]); -format_mfa({M, F, A, Props}, Opts) when is_list(Props) -> +format_mfa({M, F, A, Props}) when is_list(Props) -> case get_value(line, Props) of undefined -> - format_mfa({M, F, A}, Opts); + format_mfa({M, F, A}); Line -> - [format_mfa({M, F, A}, Opts), io_lib:format("(line:~w)", [Line])] + [format_mfa({M, F, A}), io_lib:format("(line:~w)", [Line])] end; -format_mfa(Trace, _Opts) when is_list(Trace) -> +format_mfa(Trace) when is_list(Trace) -> format_trace(Trace); -format_mfa(Other, _Opts) -> +format_mfa(Other) -> io_lib:format("~w", [Other]). @@ -393,15 +377,12 @@ trace_mfa(Other) -> format_mfa(Other). -format_args(Args, Format, Acc) -> - format_args(Args, Format, Acc, #{}). - -format_args([], FmtAcc, ArgsAcc, _Opts) -> +format_args([], FmtAcc, ArgsAcc) -> {string:join(lists:reverse(FmtAcc), ", "), lists:reverse(ArgsAcc)}; -format_args([H|T], FmtAcc, ArgsAcc, Opts) -> - {Str, _} = couch_log_trunc_io:print(maybe_sanitize_term(H, Opts), 100), - format_args(T, ["~s" | FmtAcc], [Str | ArgsAcc], Opts). +format_args([H|T], FmtAcc, ArgsAcc) -> + {Str, _} = couch_log_trunc_io:print(H, 100), + format_args(T, ["~s" | FmtAcc], [Str | ArgsAcc]). maybe_truncate(Fmt, Args) -> @@ -446,8 +427,8 @@ print_silly_list([H | T], Fmt, Acc) -> print_silly_list(T, ["~p" | Fmt], [H | Acc]). -print_val(Val, Opts) -> - {Str, _} = couch_log_trunc_io:print(maybe_sanitize_term(Val, Opts), 500), +print_val(Val) -> + {Str, _} = couch_log_trunc_io:print(Val, 500), Str. @@ -477,100 +458,3 @@ get_value(Key, List, Default) -> supervisor_name({local, Name}) -> Name; supervisor_name(Name) -> Name. - - -format_state({State, #{module := _}}, Opts) -> - maybe_sanitize_state(State, Opts); -format_state(State, Opts) -> - maybe_sanitize_state(State, Opts). - -ctx_opts(supervisor_progress, Child) -> - Opts = ctx_opts(supervisor, Child), - Opts#{kind => supervisor_progress}; -ctx_opts(supervisor, Off) -> - Id = get_value(id, Off), - Sanitizer = couch_log_config:get(sanitizer_module), - case get_value(mfargs, Off) of - undefined -> - %% supervisor_bridge - case get_value(mod, Off) of - undefined -> - #{ - kind => supervisor, - id => Id, - sanitizer => Sanitizer - }; - M -> - #{ - kind => supervisor, - id => Id, - module => M, - sanitizer => Sanitizer - } - end; - {M, _F, _A} -> - %% regular supervisor - #{ - kind => supervisor, - id => Id, - module => M, - sanitizer => Sanitizer - } - end; -ctx_opts(crash_report, Report) -> - Dictionary = get_value(dictionary, Report, []), - InitialCall = get_value('$initial_call', Dictionary), - #{ - kind => crash_report, - id => get_value(registered_name, Report), - dictionary => Dictionary, - initial_call => InitialCall, - sanitizer => couch_log_config:get(sanitizer_module) - }; -ctx_opts(application, App) -> - #{ - kind => application, - application => App, - sanitizer => couch_log_config:get(sanitizer_module) - }; -ctx_opts(Kind, {_State, #{module := _} = Opts}) -> - Opts#{ - kind => Kind, - sanitizer => couch_log_config:get(sanitizer_module) - }; -ctx_opts(gen_server, [ - {data, [{"State", _State}]}, - {supervisor, [{"Callback", Module}]}]) -> - %% technically we can get `id` from `_State` it should be `element(2, State)` - %% see https://github.com/erlang/otp/blob/master/lib/stdlib/src/supervisor.erl#L127 - #{ - kind => supervisor, - module => Module, - sanitizer => couch_log_config:get(sanitizer_module) - }; -ctx_opts(Kind, _State) -> - #{ - kind => Kind, - sanitizer => couch_log_config:get(sanitizer_module) - }. - -maybe_sanitize_term(Term, #{sanitizer := undefined}) -> - Term; -maybe_sanitize_term(Term, #{sanitizer := Module} = Opts) -> - Module:sanitize_term(Term, Opts); -maybe_sanitize_term(Term, _) -> - Term. - -maybe_sanitize_state(Term, #{sanitizer := undefined}) -> - Term; -maybe_sanitize_state(Term, #{sanitizer := Module} = Opts) -> - Module:sanitize_state(Term, Opts); -maybe_sanitize_state(Term, _) -> - Term. - -maybe_sanitize_reason(Term, #{sanitizer := undefined}) -> - Term; -maybe_sanitize_reason(Term, #{sanitizer := Module} = Opts) -> - Module:sanitize_reason(Term, Opts); -maybe_sanitize_reason(Term, _) -> - Term. \ No newline at end of file diff --git a/src/couch_log/src/couch_log_sup.erl b/src/couch_log/src/couch_log_sup.erl index 605303d..fc1ac78 100644 --- a/src/couch_log/src/couch_log_sup.erl +++ b/src/couch_log/src/couch_log_sup.erl @@ -65,8 +65,6 @@ handle_config_change("log", Key, _, _, S) -> couch_log_config:reconfigure(); "strip_last_msg" -> couch_log_config:reconfigure(); - "sanitizer_module" -> - couch_log_config:reconfigure(); _ -> % Someone may have changed the config for % the writer so we need to re-initialize. diff --git a/src/couch_log/test/eunit/couch_log_config_test.erl b/src/couch_log/test/eunit/couch_log_config_test.erl index b2746ac..a4c4bcf 100644 --- a/src/couch_log/test/eunit/couch_log_config_test.erl +++ b/src/couch_log/test/eunit/couch_log_config_test.erl @@ -27,8 +27,7 @@ couch_log_config_test_() -> fun check_bad_level/0, fun check_bad_max_message_size/0, fun check_strip_last_msg/0, - fun check_bad_strip_last_msg/0, - fun check_sanitizer_module/0 + fun check_bad_strip_last_msg/0 ] }. @@ -144,17 +143,3 @@ check_bad_strip_last_msg() -> couch_log_test_util:wait_for_config(), ?assertEqual(true, couch_log_config:get(strip_last_msg)) end). - -check_sanitizer_module() -> - % Default is undefined - ?assertEqual(undefined, couch_log_config:get(sanitizer_module)), - - couch_log_test_util:with_config_listener(fun() -> - config:set("log", "sanitizer_module", "mymodule"), - couch_log_test_util:wait_for_config(), - ?assertEqual(mymodule, couch_log_config:get(sanitizer_module)), - - config:delete("log", "sanitizer_module"), - couch_log_test_util:wait_for_config(), - ?assertEqual(undefined, couch_log_config:get(sanitizer_module)) - end). \ No newline at end of file diff --git a/src/couch_log/test/eunit/couch_log_formatter_test.erl b/src/couch_log/test/eunit/couch_log_formatter_test.erl index a71187f..24de346 100644 --- a/src/couch_log/test/eunit/couch_log_formatter_test.erl +++ b/src/couch_log/test/eunit/couch_log_formatter_test.erl @@ -16,21 +16,6 @@ -include("couch_log.hrl"). -include_lib("eunit/include/eunit.hrl"). --export([ - sanitize_term/2, - sanitize_reason/2, - sanitize_state/2 -]). - - -sanitize_term(Term, #{dictionary := PDict, kind := Kind}) -> - {Kind, {sanitized_term, Term}, {sanitized_pdict, PDict}}. - -sanitize_reason(Term, #{dictionary := PDict, kind := Kind}) -> - {sanitized_reason, Kind, Term, PDict}. - -sanitize_state(Term, #{dictionary := PDict, kind := Kind}) -> - {sanitized_state, Kind, Term, PDict}. truncate_fmt_test() -> Msg = [0 || _ <- lists:seq(1, 1048576)], @@ -992,123 +977,3 @@ do_matches(#log_entry{msg = Msg} = E, [Pattern | RestPatterns]) -> ?assertEqual(nomatch, Err2) end, do_matches(E, RestPatterns). - -sanitizer_test_() -> - {setup, - fun() -> - Ctx = couch_log_test_util:start(), - couch_log_test_util:with_config_listener(fun() -> - config:set("log", "sanitizer_module", atom_to_list(?MODULE)), - couch_log_test_util:wait_for_config() - end), - Ctx - end, - fun couch_log_test_util:stop/1, - [ - {"gen_server", fun check_gen_server_with_ctx/0}, - {"gen_fsm", fun check_gen_fsm_with_ctx/0}, - {"gen_event", fun check_gen_event_with_ctx/0} - ] - }. - -check_gen_server_with_ctx() -> - {gen_server, ?_test(begin - Pid = self(), - Ctx = #{dictionary => [{key, value}], module => ?MODULE}, - Event = { - error, - erlang:group_leader(), - { - Pid, - "** Generic server and some stuff", - [ - a_gen_server, - {foo, bar}, - {server_state, Ctx}, - some_reason - ] - } - }, - Formatted = do_format(Event), - ?assertMatch( - #log_entry{ - level = error, - pid = Pid - }, - Formatted - ), - do_matches(Formatted, [ - "gen_server a_gen_server terminated", - "with reason: {sanitized_reason,gen_server,some_reason,\\[{key,value}\\]}", - "last msg: redacted", - "state: {sanitized_state,gen_server,server_state,\\[{key,value}\\]}", - "extra: \\[\\]" - ]) -end)}. - -check_gen_fsm_with_ctx() -> - Pid = self(), - Ctx = #{dictionary => [{key, value}], module => ?MODULE}, - Event = { - error, - erlang:group_leader(), - { - Pid, - "** State machine did a thing", - [ - a_gen_fsm, - {foo, bar}, - state_name, - {current_state, Ctx}, - some_reason - ] - } - }, - Formatted = do_format(Event), - ?assertMatch( - #log_entry{ - level = error, - pid = Pid - }, - Formatted - ), - do_matches(Formatted, [ - "gen_fsm a_gen_fsm in state state_name", - "with reason: {sanitized_reason,gen_fsm,some_reason,\\[{key,value}\\]}", - "last msg: redacted", - "state: {sanitized_state,gen_fsm,current_state,\\[{key,value}\\]}", - "extra: \\[\\]" - ]). - -check_gen_event_with_ctx() -> - Pid = self(), - Ctx = #{dictionary => [{key, value}], module => ?MODULE}, - Event = { - error, - erlang:group_leader(), - { - Pid, - "** gen_event handler did a thing", - [ - handler_id, - a_gen_event, - {foo,bat}, - {current_state, Ctx}, - some_reason - ] - } - }, - Formatted = do_format(Event), - ?assertMatch( - #log_entry{ - level = error, - pid = Pid - }, - Formatted - ), - do_matches(Formatted, [ - "gen_event handler_id installed in a_gen_event", - "reason: {sanitized_reason,gen_event,some_reason,\\[{key,value}\\]}", - "last msg: redacted", - "state: {sanitized_state,gen_event,current_state,\\[{key,value}\\]}" - ]).
