From efaea270e1d65cf6d0cb3f94136f15e170277b22 Mon Sep 17 00:00:00 2001 From: Evan Vigil-McClanahan Date: Mon, 24 Aug 2020 21:15:48 -0700 Subject: [PATCH 1/2] add a pterm formatter --- src/lager_default_formatter.erl | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/lager_default_formatter.erl b/src/lager_default_formatter.erl index 7e11f9d..ad2b918 100644 --- a/src/lager_default_formatter.erl +++ b/src/lager_default_formatter.erl @@ -98,6 +98,10 @@ output(metadata, Msg) -> output({metadata, IntSep, FieldSep}, Msg) -> MD = lists:keysort(1, lager_msg:metadata(Msg)), 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(persistent_term:get(Key, Default)); output(Prop,Msg) when is_atom(Prop) -> Metadata = lager_msg:metadata(Msg), make_printable(get_metadata(Prop,Metadata,<<"Undefined">>)); @@ -147,6 +151,10 @@ output(metadata, Msg, _Width) -> output({metadata, IntSep, FieldSep}, Msg, _Width) -> MD = lists:keysort(1, lager_msg:metadata(Msg)), [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(persistent_term:get(Key, Default)); output(Prop, Msg, Width) when is_atom(Prop) -> Metadata = lager_msg:metadata(Msg), @@ -505,6 +513,29 @@ basic_test_() -> []), [severity_upper, " Simplist Format"]))) }, + {"pterm presence test", + ?_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) + }, + {"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", begin [N, "foo"] = format(lager_msg:new("Message", From 11019060904ef2244fcf93e73e310c2d3ae214ff Mon Sep 17 00:00:00 2001 From: Mark Allen Date: Tue, 25 Aug 2020 16:25:05 -0500 Subject: [PATCH 2/2] Avoid persistent_term for OTP < 21 --- src/lager_default_formatter.erl | 47 +++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 14 deletions(-) diff --git a/src/lager_default_formatter.erl b/src/lager_default_formatter.erl index ad2b918..8ed2647 100644 --- a/src/lager_default_formatter.erl +++ b/src/lager_default_formatter.erl @@ -101,7 +101,7 @@ output({metadata, IntSep, FieldSep}, Msg) -> output({pterm, Key}, Msg) -> output({pterm, Key, ""}, Msg); output({pterm, Key, Default}, _Msg) -> - make_printable(persistent_term:get(Key, Default)); + make_printable(maybe_get_persistent_term(Key, Default)); output(Prop,Msg) when is_atom(Prop) -> Metadata = lager_msg:metadata(Msg), make_printable(get_metadata(Prop,Metadata,<<"Undefined">>)); @@ -154,7 +154,7 @@ output({metadata, IntSep, FieldSep}, Msg, _Width) -> output({pterm, Key}, Msg, Width) -> output({pterm, Key, ""}, Msg, Width); output({pterm, Key, Default}, _Msg, _Width) -> - make_printable(persistent_term:get(Key, Default)); + make_printable(maybe_get_persistent_term(Key, Default)); output(Prop, Msg, Width) when is_atom(Prop) -> Metadata = lager_msg:metadata(Msg), @@ -193,6 +193,20 @@ make_printable(A,{Align,W}) when is_integer(W) -> 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) -> try Function() of Result -> @@ -514,18 +528,23 @@ basic_test_() -> [severity_upper, " Simplist Format"]))) }, {"pterm presence test", - ?_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) + %% 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">>,