Current section

Files

Jump to
diint_utilites_common_app src log json_logger_formatter.erl
Raw

src/log/json_logger_formatter.erl

-module(json_logger_formatter).
-export([format/2]).
format( #{level := Level,
msg := Message,
meta := #{pid := Pid,
time := Timestamp,
line := Line,
mfa := {MODULE, FUNCTION_NAME, _FUNCTION_ARITY}
}} = MI, _FConfig)->
case jsone:try_encode(#{level => Level, message => get_message(Message), time => msToDate(Timestamp),module => MODULE,func_name => FUNCTION_NAME},[native_utf8]) of
{ok,Bin} -> Bin;
_else -> case jsone:try_encode(#{message => unicode:characters_to_binary(logger_formatter:format(MI,get_default_config())), level => Level, time => msToDate(Timestamp), module => MODULE,func_name => FUNCTION_NAME},[native_utf8]) of
{ok,Bin} -> Bin;
_else -> jsone:try_encode(#{message => <<"критическая ошибка логирования">>, level => <<"Fatal">>})
end
end.
get_message({report, Report})->
Report;
get_message({string, Chardata})->
#{text => unicode:characters_to_binary(Chardata)};
get_message({Io, Data})-> #{ text => io_lib:format(Io,Data)}.
get_default_config()->
#{chars_limit => unlimited,
depth => unlimited,
legacy_header => true,
max_size => unlimited,
report_cb => fun(Report) -> logger:format_report(Report) end,
single_line => true,
template => [time," ",level,": ",msg,"\n"],
time_designator => $T,
time_offset => ""}.
msToDate(Milliseconds) ->
MegaSecs = Milliseconds div 1000000000000,
Secs = Milliseconds div 1000000 - MegaSecs*1000000,
MicroSecs = Milliseconds rem 1000000,
calendar:now_to_local_time({MegaSecs, Secs, MicroSecs}).
% BaseDate = calendar:datetime_to_gregorian_seconds({{1970,1,1},{0,0,0}}),
% Seconds = BaseDate + (Milliseconds div 1000000),
% {Date, {Hour, Minute, Second}} = calendar:gregorian_seconds_to_datetime(Seconds),
% {Date,{Hour + 3 rem 23,Minute, Second}}.