Merge pull request #196 from basho/adt-less-proplists
Don't use the proplists module when decoding error_logger messages
diff --git a/src/error_logger_lager_h.erl b/src/error_logger_lager_h.erl
index 1c7e092..4a64528 100644
--- a/src/error_logger_lager_h.erl
+++ b/src/error_logger_lager_h.erl
@@ -235,8 +235,8 @@
?LOGFMT(info, P, "Application ~w started on node ~w",
[App, Node]);
[{started, Started}, {supervisor, Name}] ->
- MFA = format_mfa(proplists:get_value(mfargs, Started)),
- Pid = proplists:get_value(pid, Started),
+ MFA = format_mfa(get_value(mfargs, Started)),
+ Pid = get_value(pid, Started),
?LOGFMT(debug, P, "Supervisor ~w started ~s at pid ~w",
[supervisor_name(Name), MFA, Pid]);
_ ->
@@ -248,13 +248,13 @@
{ok, State}.
format_crash_report(Report, Neighbours) ->
- Name = case proplists:get_value(registered_name, Report, []) of
+ Name = case get_value(registered_name, Report, []) of
[] ->
%% process_info(Pid, registered_name) returns [] for unregistered processes
- proplists:get_value(pid, Report);
+ get_value(pid, Report);
Atom -> Atom
end,
- {Class, Reason, Trace} = proplists:get_value(error_info, Report),
+ {Class, Reason, Trace} = get_value(error_info, Report),
ReasonStr = format_reason({Reason, Trace}),
Type = case Class of
exit -> "exited";
@@ -264,17 +264,17 @@
[Name, length(Neighbours), Type, ReasonStr]).
format_offender(Off) ->
- case proplists:get_value(mfargs, Off) of
+ case get_value(mfargs, Off) of
undefined ->
%% supervisor_bridge
io_lib:format("at module ~w at ~w",
- [proplists:get_value(mod, Off), proplists:get_value(pid, Off)]);
+ [get_value(mod, Off), get_value(pid, Off)]);
MFArgs ->
%% regular supervisor
MFA = format_mfa(MFArgs),
- Name = proplists:get_value(name, Off),
+ Name = get_value(name, Off),
io_lib:format("~p started with ~s at ~w",
- [Name, MFA, proplists:get_value(pid, Off)])
+ [Name, MFA, get_value(pid, Off)])
end.
format_reason({'function not exported', [{M, F, A},MFA|_]}) ->
@@ -361,7 +361,7 @@
format_mfa({M, F, A}) when is_integer(A) ->
io_lib:format("~w:~w/~w", [M, F, A]);
format_mfa({M, F, A, Props}) when is_list(Props) ->
- case proplists:get_value(line, Props) of
+ case get_value(line, Props) of
undefined ->
format_mfa({M, F, A});
Line ->
@@ -405,6 +405,18 @@
{Str, _} = lager_trunc_io:print(Val, 500),
Str.
+
+%% @doc Faster than proplists, but with the same API as long as you don't need to
+%% handle bare atom keys
+get_value(Key, Value) ->
+ get_value(Key, Value, undefined).
+
+get_value(Key, List, Default) ->
+ case lists:keyfind(Key, 1, List) of
+ false -> Default;
+ {Key, Value} -> Value
+ end.
+
supervisor_name({local, Name}) -> Name;
supervisor_name(Name) -> Name.
-ifdef(TEST).
diff --git a/test/trunc_io_eqc.erl b/test/trunc_io_eqc.erl
index 532f047..9eee35e 100644
--- a/test/trunc_io_eqc.erl
+++ b/test/trunc_io_eqc.erl
@@ -137,7 +137,7 @@
gen_port() ->
?LAZY(begin
Port = erlang:open_port({spawn, "true"}, []),
- erlang:port_close(Port),
+ catch(erlang:port_close(Port)),
Port
end).