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">>,