Current section
Files
Jump to
Current section
Files
src/erlang_json_logger.erl
-module(erlang_json_logger).
%% logger callbacks
-export([ format/2 ]).
-ifdef(TEST).
-export([ format_msg/3 ]).
-endif.
%% -- logger callbacks
-spec format(LogEvent, Config) -> unicode:chardata() when
LogEvent :: logger:log_event(),
Config :: logger:formatter_config().
format(#{level:=Level, msg:={report, Msg}, meta:=Meta}, Config) when is_map(Msg) ->
Config0 = defaults(config, Config),
Meta0 = maps:put(level, Level, Meta),
format_msg(Msg, Meta0, Config0);
format(Map = #{msg := {report, KeyVal}}, Config) when is_list(KeyVal) ->
format(Map#{msg := {report, maps:from_list(KeyVal)}}, Config);
format(Map = #{msg := {string, String}}, Config) ->
Msg = #{text => unicode:characters_to_binary(String)},
format(Map#{msg := {report, Msg}}, Config);
format(Map = #{msg := {Format, Terms}}, Config) ->
String = unicode:characters_to_binary(io_lib:format(Format, Terms)),
Msg = #{text => String},
format(Map#{msg := {report, Msg}}, Config).
%% -- private
defaults(config, Map) ->
Defaults = #{ indent => 2 },
maps:merge(Defaults, Map).
format_msg(Msg, Meta, Config) ->
Details = maps:merge(Msg, Meta),
jsx:encode(Details, maps:to_list(Config)).