Current section
Files
Jump to
Current section
Files
src/logging_ffi.erl
-module(logging_ffi).
-export([configure/0, format/2]).
configure() ->
logger:update_primary_config(#{
level => info,
filter_default => log,
filters => [
{domain,{fun logger_filters:domain/2, {stop, sub, [sasl]}}},
{domain,{fun logger_filters:domain/2, {stop, sub, [supervisor_report]}}},
{progress, {fun logger_filters:progress/2, stop}}
],
metadata => #{}
}),
logger:update_handler_config(default, #{
formatter => {logging_ffi, #{colored => is_colored_output()}}
}),
nil.
is_colored_output() ->
not (
envvar_enabled("NO_COLOUR", false)
orelse envvar_enabled("NO_COLOR", false)
).
envvar_enabled(Name, Default) ->
case os:getenv(Name) of
% Not set, use default
false -> Default;
% Set to a false value
"" -> false;
"false" -> false;
% Otherwise it is enabled
_ -> true
end.
format(#{level := Level, msg := Msg, meta := _Meta}, Config) ->
[format_level(Level, Config), format_msg(Msg), $\n].
format_level(Level, #{colored := Colored}) ->
case Level of
emergency when Colored -> "\x1b[1;41mEMRG\x1b[0m";
alert when Colored -> "\x1b[1;41mALRT\x1b[0m";
critical when Colored -> "\x1b[1;41mCRIT\x1b[0m";
error when Colored -> "\x1b[1;31mEROR\x1b[0m";
warning when Colored -> "\x1b[1;33mWARN\x1b[0m";
notice when Colored -> "\x1b[1;32mNTCE\x1b[0m";
info when Colored -> "\x1b[1;34mINFO\x1b[0m";
debug when Colored -> "\x1b[1;36mDEBG\x1b[0m";
emergency -> "EMRG";
alert -> "ALRT";
critical -> "CRIT";
error -> "EROR";
warning -> "WARN";
notice -> "NTCE";
info -> "INFO";
debug -> "DEBG"
end.
format_msg(Report0) ->
case Report0 of
{string, Msg} ->
[$\s, Msg];
{report, Report1} when is_map(Report1) ->
format_kv(maps:to_list(Report1));
{report, Report1} when is_list(Report1) ->
format_kv(Report1);
_ ->
[$\s, gleam@string:inspect(Report0)]
end.
format_kv(Pairs) ->
case Pairs of
[] -> [];
[{K, V} | Rest] when is_atom(K) -> [
$\s, erlang:atom_to_binary(K), $=, gleam@string:inspect(V)
| format_kv(Rest)
];
[{K, V} | Rest] -> [
$\s, gleam@string:inspect(K), $=, gleam@string:inspect(V)
| format_kv(Rest)
];
Other -> gleam@string:inspect(Other)
end.