|
|
@ -8,6 +8,7 @@ |
|
|
|
-export([ |
|
|
|
format/2 |
|
|
|
, format/3 |
|
|
|
, formatCfg/1 |
|
|
|
]). |
|
|
|
|
|
|
|
%% |
|
|
@ -49,16 +50,6 @@ |
|
|
|
format(RumMsg, Config) -> |
|
|
|
[output(V, RumMsg) || V <- Config]. |
|
|
|
|
|
|
|
-spec format(rumMsg(), list(), list()) -> any(). |
|
|
|
format(RumMsg, [], Colors) -> |
|
|
|
format(RumMsg, [{eol, "\n"}], Colors); |
|
|
|
format(RumMsg, [{eol, EOL}], Colors) -> |
|
|
|
Config = |
|
|
|
case rumUtil:get_env(metadataWhitelist, undefined) of |
|
|
|
undefined -> config(EOL, []); |
|
|
|
Whitelist -> config(EOL, Whitelist) |
|
|
|
end, |
|
|
|
format(RumMsg, Config, Colors); |
|
|
|
format(RumMsg, Config, Colors) -> |
|
|
|
[ |
|
|
|
case V of |
|
|
@ -67,9 +58,22 @@ format(RumMsg, Config, Colors) -> |
|
|
|
end || V <- Config |
|
|
|
]. |
|
|
|
|
|
|
|
formatCfg([]) -> |
|
|
|
[datetime, color, <<"[">>, severity, <<"]">>, node, <<"|">>, pid, <<"|">>, module, <<"|">>, function, <<"|">>, line, <<"|">>, message, <<"\n">>]; |
|
|
|
formatCfg(MetaWhitelist) -> |
|
|
|
[datetime, color, <<"[">>, severity, <<"]">>, node, <<"|">>, pid, <<"|">>, module, <<"|">>, function, <<"|">>, line, <<"|">>] ++ |
|
|
|
[{M, [atom_to_binary(M), <<"=">>, M, "|"], [<<>>]} || M <- MetaWhitelist] ++ [message, <<"\n">>]. |
|
|
|
|
|
|
|
% Level, Pid, Node, Module, Function, FunctionArity, Line |
|
|
|
|
|
|
|
-define(FixMd, [pid, node, module, function, line]). |
|
|
|
|
|
|
|
-spec output(term(), rumMsg()) -> iolist(). |
|
|
|
output(message, RumMsg) -> RumMsg#rumMsg.message; |
|
|
|
output(datetime, RumMsg) -> RumMsg#rumMsg.datetime; |
|
|
|
output(datetime, RumMsg) -> RumMsg#rumMsg.datetime; |
|
|
|
output(pid, RumMsg) -> RumMsg#rumMsg.pid; |
|
|
|
output(node, RumMsg) -> RumMsg#rumMsg.node; |
|
|
|
output(datetime, RumMsg) -> RumMsg#rumMsg.datetime; |
|
|
|
output(module, RumMsg) -> atom_to_binary(RumMsg#rumMsg.module, utf8); |
|
|
|
output(function, RumMsg) -> atom_to_binary(RumMsg#rumMsg.function, utf8); |
|
|
|
output(line, RumMsg) -> integer_to_binary(RumMsg#rumMsg.line); |
|
|
@ -77,7 +81,8 @@ output(severity, RumMsg) -> loSeverity(RumMsg#rumMsg.severity); |
|
|
|
output(upSeverity, RumMsg) -> upSeverity(RumMsg#rumMsg.severity); |
|
|
|
output(blank, _RumMsg) -> <<" ">>; |
|
|
|
output(node, RumMsg) -> atom_to_binary(RumMsg#rumMsg.node, utf8); |
|
|
|
output(sev, RumMsg) -> sevSeverity(RumMsg#rumMsg.severity); %% Write brief acronym for the severity level (e.g. debug -> $D) |
|
|
|
output(sev, RumMsg) -> |
|
|
|
sevSeverity(RumMsg#rumMsg.severity); %% Write brief acronym for the severity level (e.g. debug -> $D) |
|
|
|
output(metadata, RumMsg) -> mdJoin(RumMsg#rumMsg.metadata, <<"|">>, <<>>); |
|
|
|
output({blank, Fill}, _RumMsg) -> Fill; |
|
|
|
output({metadata, IntSep, FieldSep}, RumMsg) -> |
|
|
@ -87,11 +92,11 @@ output({pterm, Key}, _RumMsg) -> |
|
|
|
output({pterm, Key, Default}, _RumMsg) -> |
|
|
|
makeStr(getPTerm(Key, Default)); |
|
|
|
output(Prop, RumMsg) when is_atom(Prop) -> |
|
|
|
makeStr(getMdKey(Prop, RumMsg#rumMsg.metadata, <<"Undefined">>)); |
|
|
|
makeStr(getMdKey(Prop, RumMsg, <<"Undefined">>)); |
|
|
|
output({Prop, Default}, RumMsg) when is_atom(Prop) -> |
|
|
|
makeStr(getMdKey(Prop, RumMsg#rumMsg.metadata, output(Default, RumMsg))); |
|
|
|
makeStr(getMdKey(Prop, RumMsg, output(Default, RumMsg))); |
|
|
|
output({Prop, Present, Absent}, RumMsg) when is_atom(Prop) -> |
|
|
|
case getMdKey(Prop, RumMsg#rumMsg.metadata) of |
|
|
|
case getMdKey(Prop, RumMsg) of |
|
|
|
undefined -> |
|
|
|
[output(V, RumMsg) || V <- Absent]; |
|
|
|
_ -> |
|
|
@ -99,7 +104,7 @@ output({Prop, Present, Absent}, RumMsg) when is_atom(Prop) -> |
|
|
|
end; |
|
|
|
output({Prop, Present, Absent, Width}, RumMsg) when is_atom(Prop) -> |
|
|
|
%% sort of like a poor man's ternary operator |
|
|
|
case getMdKey(Prop, RumMsg#rumMsg.metadata) of |
|
|
|
case getMdKey(Prop, RumMsg) of |
|
|
|
undefined -> |
|
|
|
[output(V, RumMsg, Width) || V <- Absent]; |
|
|
|
_ -> |
|
|
@ -109,6 +114,8 @@ output(Other, _) -> makeStr(Other). |
|
|
|
|
|
|
|
output(message, RumMsg, _Width) -> RumMsg#rumMsg.message; |
|
|
|
output(datetime, RumMsg, _Width) -> RumMsg#rumMsg.datetime; |
|
|
|
output(pid, RumMsg, _Width) -> RumMsg#rumMsg.pid; |
|
|
|
output(node, RumMsg, _Width) -> RumMsg#rumMsg.node; |
|
|
|
output(module, RumMsg, _Width) -> atom_to_binary(RumMsg#rumMsg.module, utf8); |
|
|
|
output(function, RumMsg, _Width) -> atom_to_binary(RumMsg#rumMsg.function, utf8); |
|
|
|
output(line, RumMsg, _Width) -> integer_to_binary(RumMsg#rumMsg.line); |
|
|
@ -116,7 +123,8 @@ output(severity, RumMsg, _Width) -> loSeverity(RumMsg#rumMsg.severity); |
|
|
|
output(upSeverity, RumMsg, _Width) -> upSeverity(RumMsg#rumMsg.severity); |
|
|
|
output(blank, _RumMsg, _Width) -> <<" ">>; |
|
|
|
output(node, RumMsg, _Width) -> atom_to_binary(RumMsg#rumMsg.node, utf8); |
|
|
|
output(sev, RumMsg, _Width) -> sevSeverity(RumMsg#rumMsg.severity); %% Write brief acronym for the severity level (e.g. debug -> $D) |
|
|
|
output(sev, RumMsg, _Width) -> |
|
|
|
sevSeverity(RumMsg#rumMsg.severity); %% Write brief acronym for the severity level (e.g. debug -> $D) |
|
|
|
output({blank, Fill}, _RumMsg, _Width) -> Fill; |
|
|
|
output(metadata, RumMsg, _Width) -> mdJoin(RumMsg#rumMsg.metadata, <<"|">>, <<>>); |
|
|
|
output({metadata, IntSep, FieldSep}, RumMsg, _Width) -> |
|
|
@ -124,9 +132,9 @@ output({metadata, IntSep, FieldSep}, RumMsg, _Width) -> |
|
|
|
output({pterm, Key}, _RumMsg, _Width) -> makeStr(getPTerm(Key, <<"">>)); |
|
|
|
output({pterm, Key, Default}, _RumMsg, _Width) -> makeStr(getPTerm(Key, Default)); |
|
|
|
output(Prop, RumMsg, Width) when is_atom(Prop) -> |
|
|
|
makeStr(getMdKey(Prop, RumMsg#rumMsg.metadata, <<"Undefined">>), Width); |
|
|
|
makeStr(getMdKey(Prop, RumMsg, <<"Undefined">>), Width); |
|
|
|
output({Prop, Default}, RumMsg, Width) when is_atom(Prop) -> |
|
|
|
makeStr(getMdKey(Prop, RumMsg#rumMsg.metadata, output(Default, RumMsg)), Width); |
|
|
|
makeStr(getMdKey(Prop, RumMsg, output(Default, RumMsg)), Width); |
|
|
|
output(Other, _, Width) -> makeStr(Other, Width). |
|
|
|
|
|
|
|
outColor([], _RumMsg) -> <<>>; |
|
|
@ -166,13 +174,18 @@ makeStr(_, Str, W) -> |
|
|
|
getPTerm(Key, Default) -> |
|
|
|
persistent_term:get(Key, Default). |
|
|
|
|
|
|
|
getMdKey(Key, Metadata) -> |
|
|
|
getMdKey(Key, Metadata, undefined). |
|
|
|
getMdKey(Key, RumMsg) -> |
|
|
|
getMdKey(Key, RumMsg, undefined). |
|
|
|
|
|
|
|
getMdKey(Key, Metadata, Default) -> |
|
|
|
case lists:keyfind(Key, 1, Metadata) of |
|
|
|
getMdKey(Key, RumMsg, Default) -> |
|
|
|
case lists:keyfind(Key, 1, RumMsg#rumMsg.metadata) of |
|
|
|
false -> |
|
|
|
Default; |
|
|
|
case lists:member(Key, ?FixMd) of |
|
|
|
true -> |
|
|
|
output(Key, RumMsg); |
|
|
|
_ -> |
|
|
|
Default |
|
|
|
end; |
|
|
|
{_Key, Fun} when is_function(Fun) -> |
|
|
|
runFun(Fun, Default); |
|
|
|
{_Key, Value} -> |
|
|
@ -186,56 +199,31 @@ runFun(Fun, Default) -> |
|
|
|
Default |
|
|
|
end. |
|
|
|
|
|
|
|
config(EOL, []) -> |
|
|
|
[ |
|
|
|
datetime, " ", color, "[", severity, "] ", |
|
|
|
{pid, ""}, |
|
|
|
{module, [ |
|
|
|
{pid, ["@"], ""}, |
|
|
|
module, |
|
|
|
{function, [":", function], ""}, |
|
|
|
{line, [":", line], ""}], ""}, |
|
|
|
" ", message, EOL |
|
|
|
]; |
|
|
|
config(EOL, MetaWhitelist) -> |
|
|
|
[ |
|
|
|
datetime, " ", color, "[", severity, "] ", |
|
|
|
{pid, ""}, |
|
|
|
{module, [ |
|
|
|
{pid, ["@"], ""}, |
|
|
|
module, |
|
|
|
{function, [":", function], ""}, |
|
|
|
{line, [":", line], ""}], ""}, |
|
|
|
" " |
|
|
|
] ++ |
|
|
|
[{M, [atom_to_list(M), "=", M, " "], ""} || M <- MetaWhitelist] ++ |
|
|
|
[message, EOL]. |
|
|
|
|
|
|
|
loSeverity(?debug) -> <<"debug">>; |
|
|
|
loSeverity(?info) -> <<"info">>; |
|
|
|
loSeverity(?notice) -> <<"notice">>; |
|
|
|
loSeverity(?warning) -> <<"warning">>; |
|
|
|
loSeverity(?error) -> <<"error">>; |
|
|
|
loSeverity(?critical) -> <<"critical">>; |
|
|
|
loSeverity(?alert) -> <<"alert">>; |
|
|
|
loSeverity(?emergency) -> <<"emergency">>; |
|
|
|
loSeverity(?none) -> <<"none">>. |
|
|
|
|
|
|
|
upSeverity(?debug) -> <<"DEBUG">>; |
|
|
|
upSeverity(?info) -> <<"INFO">>; |
|
|
|
upSeverity(?notice) -> <<"NOTICE">>; |
|
|
|
upSeverity(?warning) -> <<"WARNING">>; |
|
|
|
upSeverity(?error) -> <<"ERROR">>; |
|
|
|
loSeverity(?debug) -> <<"debug">>; |
|
|
|
loSeverity(?info) -> <<"info">>; |
|
|
|
loSeverity(?notice) -> <<"notice">>; |
|
|
|
loSeverity(?warning) -> <<"warning">>; |
|
|
|
loSeverity(?error) -> <<"error">>; |
|
|
|
loSeverity(?critical) -> <<"critical">>; |
|
|
|
loSeverity(?alert) -> <<"alert">>; |
|
|
|
loSeverity(?emergency) -> <<"emergency">>; |
|
|
|
loSeverity(?none) -> <<"none">>. |
|
|
|
|
|
|
|
upSeverity(?debug) -> <<"DEBUG">>; |
|
|
|
upSeverity(?info) -> <<"INFO">>; |
|
|
|
upSeverity(?notice) -> <<"NOTICE">>; |
|
|
|
upSeverity(?warning) -> <<"WARNING">>; |
|
|
|
upSeverity(?error) -> <<"ERROR">>; |
|
|
|
upSeverity(?critical) -> <<"CRITICAL">>; |
|
|
|
upSeverity(?alert) -> <<"ALERT">>; |
|
|
|
upSeverity(?emergency) -> <<"EMERGENCY">>; |
|
|
|
upSeverity(?none) -> <<"NONE">>. |
|
|
|
|
|
|
|
sevSeverity(?debug) -> <<"[D]">>; |
|
|
|
sevSeverity(?info) -> <<"[I]">>; |
|
|
|
sevSeverity(?notice) -> <<"[N]">>; |
|
|
|
sevSeverity(?warning) -> <<"[W]">>; |
|
|
|
sevSeverity(?error) -> <<"[E]">>; |
|
|
|
sevSeverity(?debug) -> <<"[D]">>; |
|
|
|
sevSeverity(?info) -> <<"[I]">>; |
|
|
|
sevSeverity(?notice) -> <<"[N]">>; |
|
|
|
sevSeverity(?warning) -> <<"[W]">>; |
|
|
|
sevSeverity(?error) -> <<"[E]">>; |
|
|
|
sevSeverity(?critical) -> <<"[C]">>; |
|
|
|
sevSeverity(?alert) -> <<"[A]">>; |
|
|
|
sevSeverity(?emergency) -> <<"[E]">>; |
|
|
|