From 3640b6acfee43f72aed099d972b3d6afe7c667a9 Mon Sep 17 00:00:00 2001 From: Andrew Thompson Date: Sat, 27 May 2017 15:41:59 -0700 Subject: [PATCH] Fixes for OTP 20 * Handle new gen_server crash messages that contain client pid and stacktrace * Update platform define for OTP 20 * Handle arity change in gen_fsm handle_msg --- rebar.config | 2 +- src/error_logger_lager_h.erl | 9 ++++++++- test/lager_test_backend.erl | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/rebar.config b/rebar.config index 9fe6566..3d8f9e9 100644 --- a/rebar.config +++ b/rebar.config @@ -21,7 +21,7 @@ {erl_opts, [ {lager_extra_sinks, ['__lager_test_sink']}, - {platform_define, "19", test_statem}, + {platform_define, "(19|20)", test_statem}, debug_info, report, verbose, diff --git a/src/error_logger_lager_h.erl b/src/error_logger_lager_h.erl index a1fc4f2..9ee5f11 100644 --- a/src/error_logger_lager_h.erl +++ b/src/error_logger_lager_h.erl @@ -146,7 +146,14 @@ log_event(Event, #state{sink=Sink} = State) -> case {FormatRaw, Fmt} of {false, "** Generic server "++_} -> %% gen_server terminate - [Name, _Msg, _State, Reason] = Args, + {Reason, Name} = case Args of + [N, _Msg, _State, R] -> + {R, N}; + [N, _Msg, _State, R, _Client, _Stacktrace] -> + %% OTP 20 crash reports contain the pid of the client and stacktrace + %% TODO do something with them + {R, N} + end, ?CRASH_LOG(Event), {Md, Formatted} = format_reason_md(Reason), ?LOGFMT(Sink, error, [{pid, Pid}, {name, Name} | Md], "gen_server ~w terminated with reason: ~s", diff --git a/test/lager_test_backend.erl b/test/lager_test_backend.erl index 6286235..2683a2a 100644 --- a/test/lager_test_backend.erl +++ b/test/lager_test_backend.erl @@ -1029,7 +1029,7 @@ crash_fsm_test_() -> } end, - TestBody("gen_fsm crash", crash_fsm, "gen_fsm crash_fsm in state state1 terminated with reason: call to undefined function crash_fsm:state1/3 from gen_fsm:handle_msg/7"), + TestBody("gen_fsm crash", crash_fsm, "gen_fsm crash_fsm in state state1 terminated with reason: call to undefined function crash_fsm:state1/3 from gen_fsm:handle_msg/"), TestBody("gen_statem crash", crash_statem, "gen_statem crash_statem in state state1 terminated with reason: no function clause matching crash_statem:handle") ],