Przeglądaj źródła

Merge pull request #530 from erlang-lager/evanmcc-pterm-formatter

Avoid the persistent_term calls for OTP < 21
master
Mark Allen 4 lat temu
committed by GitHub
rodzic
commit
4e4445c26d
Nie znaleziono w bazie danych klucza dla tego podpisu ID klucza GPG: 4AEE18F83AFDEB23
1 zmienionych plików z 50 dodań i 0 usunięć
  1. +50
    -0
      src/lager_default_formatter.erl

+ 50
- 0
src/lager_default_formatter.erl Wyświetl plik

@ -98,6 +98,10 @@ output(metadata, Msg) ->
output({metadata, IntSep, FieldSep}, Msg) -> output({metadata, IntSep, FieldSep}, Msg) ->
MD = lists:keysort(1, lager_msg:metadata(Msg)), MD = lists:keysort(1, lager_msg:metadata(Msg)),
string:join([io_lib:format("~s~s~p", [K, IntSep, V]) || {K, V} <- MD], FieldSep); string:join([io_lib:format("~s~s~p", [K, IntSep, V]) || {K, V} <- MD], FieldSep);
output({pterm, Key}, Msg) ->
output({pterm, Key, ""}, Msg);
output({pterm, Key, Default}, _Msg) ->
make_printable(maybe_get_persistent_term(Key, Default));
output(Prop,Msg) when is_atom(Prop) -> output(Prop,Msg) when is_atom(Prop) ->
Metadata = lager_msg:metadata(Msg), Metadata = lager_msg:metadata(Msg),
make_printable(get_metadata(Prop,Metadata,<<"Undefined">>)); make_printable(get_metadata(Prop,Metadata,<<"Undefined">>));
@ -147,6 +151,10 @@ output(metadata, Msg, _Width) ->
output({metadata, IntSep, FieldSep}, Msg, _Width) -> output({metadata, IntSep, FieldSep}, Msg, _Width) ->
MD = lists:keysort(1, lager_msg:metadata(Msg)), MD = lists:keysort(1, lager_msg:metadata(Msg)),
[string:join([io_lib:format("~s~s~p", [K, IntSep, V]) || {K, V} <- MD], FieldSep)]; [string:join([io_lib:format("~s~s~p", [K, IntSep, V]) || {K, V} <- MD], FieldSep)];
output({pterm, Key}, Msg, Width) ->
output({pterm, Key, ""}, Msg, Width);
output({pterm, Key, Default}, _Msg, _Width) ->
make_printable(maybe_get_persistent_term(Key, Default));
output(Prop, Msg, Width) when is_atom(Prop) -> output(Prop, Msg, Width) when is_atom(Prop) ->
Metadata = lager_msg:metadata(Msg), Metadata = lager_msg:metadata(Msg),
@ -185,6 +193,20 @@ make_printable(A,{Align,W}) when is_integer(W) ->
make_printable(A,_W) -> make_printable(A). make_printable(A,_W) -> make_printable(A).
%% persistent term was introduced in OTP 21.2, so
%% if we're running on an older OTP, just return the
%% default value.
-ifdef(OTP_RELEASE).
maybe_get_persistent_term(Key, Default) ->
try
persistent_term:get(Key, Default)
catch
_:undef -> Default
end.
-else.
maybe_get_persistent_term(_Key, Default) -> Default.
-endif.
run_function(Function, Default) -> run_function(Function, Default) ->
try Function() of try Function() of
Result -> Result ->
@ -505,6 +527,34 @@ basic_test_() ->
[]), []),
[severity_upper, " Simplist Format"]))) [severity_upper, " Simplist Format"])))
}, },
{"pterm presence test",
%% skip test on OTP < 21
case list_to_integer(erlang:system_info(otp_release)) >= 21 of
true ->
?_assertEqual(<<"Pterm is: something">>,
begin
persistent_term:put(thing, something),
Ret = iolist_to_binary(format(lager_msg:new("Message",
Now,
emergency,
[{pid, self()}],
[]),
["Pterm is: ", {pterm, thing}])),
persistent_term:erase(thing),
Ret
end);
false -> ?_assert(true)
end
},
{"pterm absence test",
?_assertEqual(<<"Pterm is: nothing">>,
iolist_to_binary(format(lager_msg:new("Message",
Now,
emergency,
[{pid, self()}],
[]),
["Pterm is: ", {pterm, thing, "nothing"}])))
},
{"node formatting basic", {"node formatting basic",
begin begin
[N, "foo"] = format(lager_msg:new("Message", [N, "foo"] = format(lager_msg:new("Message",

Ładowanie…
Anuluj
Zapisz