Explorar el Código

Rework logger configuration and add logger config generator

adt/lager_use_logger-option
Andrew Thompson hace 5 años
padre
commit
67466436aa
Se han modificado 3 ficheros con 54 adiciones y 36 borrados
  1. +6
    -2
      README.md
  2. +42
    -34
      src/lager.erl
  3. +6
    -0
      src/lager_app.erl

+ 6
- 2
README.md Ver fichero

@ -1179,8 +1179,6 @@ support these options. A toplevel dependency will override any lager
dependencies in any of your application's dependencies and thus ensure the parse
transform is the right version.
XXX the following is not yet implemented:
To generate a logger configuration from your lager configuration you can do:
```
@ -1197,6 +1195,12 @@ lager configure logger you can, in your sys.config in the lager stanza:
]}
```
Alternatively you can use:
```
lager:configure_logger()
```
3.x Changelog
-------------
3.6.8 - 21 December 2018

+ 42
- 34
src/lager.erl Ver fichero

@ -37,7 +37,7 @@
update_loglevel_config/1, posix_error/1, set_loghwm/2, set_loghwm/3, set_loghwm/4,
safe_format/3, safe_format_chop/3, unsafe_format/2, dispatch_log/5, dispatch_log/7, dispatch_log/9,
do_log/9, do_log/10, do_log_unsafe/10, pr/2, pr/3, pr_stacktrace/1, pr_stacktrace/2,
configure_logger/0]).
generate_logger_config/0, configure_logger/0]).
-type log_level() :: none | debug | info | notice | warning | error | critical | alert | emergency.
-type log_level_number() :: 0..7.
@ -690,54 +690,62 @@ rotate_handler(Handler) ->
rotate_handler(Handler, Sink) ->
gen_event:call(Sink, Handler, rotate, ?ROTATE_TIMEOUT).
generate_logger_config() ->
Handlers = application:get_env(lager, handlers, lager_app:default_handlers()),
{Level, NewHandlers} = generate_logger_handlers(Handlers, {notice, []}),
{kernel, [{logger_level, Level}, {logger, NewHandlers}]}.
configure_logger() ->
Handlers = application:get_env(lager, handlers, lager_app:default_handlers()),
WhitelistedLoggerHandlers = application:get_env(lager, whitelisted_logger_handlers, []),
[ ok = logger:remove_handler(Id) || #{id := Id} <- logger:get_handler_config(), not lists:member(Id, WhitelistedLoggerHandlers) ],
add_logger_handlers(Handlers).
{Level, NewHandlers} = generate_logger_handlers(Handlers, {notice, []}),
logger:set_primary_config(maps:merge(logger:get_primary_config(), #{level => Level})),
[ ok = logger:add_handler(HandlerId, HandlerModule, HandlerConfig) || {handler, HandlerId, HandlerModule, HandlerConfig} <- NewHandlers ],
ok.
add_logger_handlers([]) ->
ok;
add_logger_handlers([{lager_console_backend, Config}|Tail]) ->
generate_logger_handlers([], Acc) ->
Acc;
generate_logger_handlers([{lager_console_backend, Config}|Tail], {CurrentLevel, Acc}) ->
Level = proplists:get_value(level, Config, info),
Formatter = proplists:get_value(formatter, Config, lager_default_formatter),
FormatterConfig = proplists:get_value(formatter_config, Config, []),
logger:add_handler(console, logger_std_h, #{level => Level, formatter =>
{lager_logger_formatter, #{report_cb => fun lager_logger_formatter:report_cb/1,
formatter => Formatter,
formatter_config => FormatterConfig}}}),
PriConfig = #{level := CurrentLevel} = logger:get_primary_config(),
case lager_util:level_to_num(Level) > lager_util:level_to_num(CurrentLevel) of
true ->
logger:set_primary_config(maps:merge(PriConfig, #{level => Level}));
false ->
ok
end,
add_logger_handlers(Tail);
add_logger_handlers([{lager_file_backend, Config}|Tail]) ->
Handler = {handler, console, logger_std_h, #{level => Level, formatter =>
{lager_logger_formatter, #{report_cb => fun lager_logger_formatter:report_cb/1,
formatter => Formatter,
formatter_config => FormatterConfig}}}},
NewLevel = case lager_util:level_to_num(Level) > lager_util:level_to_num(CurrentLevel) of
true ->
Level;
false ->
CurrentLevel
end,
generate_logger_handlers(Tail, {NewLevel, [Handler|Acc]});
generate_logger_handlers([{lager_file_backend, Config}|Tail], {CurrentLevel, Acc}) ->
Level = proplists:get_value(level, Config, info),
File = proplists:get_value(file, Config),
LogRoot = application:get_env(lager, log_root, ""),
Size = proplists:get_value(size, Config),
Count = proplists:get_value(count, Config),
Formatter = proplists:get_value(formatter, Config, lager_default_formatter),
FormatterConfig = proplists:get_value(formatter_config, Config, []),
logger:add_handler(list_to_atom(File), logger_disk_log_h, #{level => Level,
file => File,
max_no_files => Count,
max_no_bytes => Size,
formatter =>
{lager_logger_formatter, #{report_cb => fun lager_logger_formatter:report_cb/1,
formatter => Formatter,
formatter_config => FormatterConfig}}}),
PriConfig = #{level := CurrentLevel} = logger:get_primary_config(),
case lager_util:level_to_num(Level) > lager_util:level_to_num(CurrentLevel) of
true ->
logger:set_primary_config(maps:merge(PriConfig, #{level => Level}));
false ->
ok
end,
add_logger_handlers(Tail).
%% XXX I don't think disk_log is suitable as it is, we should provide a logger compatible version of
%% lager's file_backend and try to patch disk_log upstream
Handler = {handler, list_to_atom(File), logger_disk_log_h, #{level => Level,
file => filename:join(LogRoot, File),
max_no_files => Count,
max_no_bytes => Size,
formatter =>
{lager_logger_formatter, #{report_cb => fun lager_logger_formatter:report_cb/1,
formatter => Formatter,
formatter_config => FormatterConfig}}}},
NewLevel = case lager_util:level_to_num(Level) > lager_util:level_to_num(CurrentLevel) of
true ->
Level;
false ->
CurrentLevel
end,
generate_logger_handlers(Tail, {NewLevel, [Handler|Acc]}).
%% @private

+ 6
- 0
src/lager_app.erl Ver fichero

@ -235,6 +235,12 @@ start(_StartType, _StartArgs) ->
clean_up_config_checks(),
{ok, Pid, SavedHandlers};
true ->
case application:get_env(lager, configure_logger, false) of
true ->
ok = lager:configure_logger();
false ->
ok
end,
{ok, Pid}
end.

Cargando…
Cancelar
Guardar