From 05bc579028d3e87f3e043238e08480354c9fd222 Mon Sep 17 00:00:00 2001 From: Andrew Thompson Date: Tue, 5 Jun 2018 09:46:02 -0700 Subject: [PATCH 1/2] OTP 21 support To support OTP 21 we manually start error_logger if it is not present (and lager is configured to install an error_logger handler) and we add error_logger as a logger handler. Longer term we should switch to installing our own logger handler, but that is a larger task as we'd have to redo all the event parsing, if that is even possible. --- rebar.config | 2 +- src/lager_app.erl | 28 +++++++++++++++++----------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/rebar.config b/rebar.config index 4b4d8a8..c0be13c 100644 --- a/rebar.config +++ b/rebar.config @@ -21,7 +21,7 @@ {erl_opts, [ {lager_extra_sinks, ['__lager_test_sink']}, - {platform_define, "(19|20)", test_statem}, + {platform_define, "(19|20|21)", test_statem}, {platform_define, "(18)", 'FUNCTION_NAME', unavailable}, {platform_define, "(18)", 'FUNCTION_ARITY', 0}, debug_info, diff --git a/src/lager_app.erl b/src/lager_app.erl index 2d3643d..01b1487 100644 --- a/src/lager_app.erl +++ b/src/lager_app.erl @@ -158,24 +158,30 @@ start_error_logger_handler(true, HWM, WhiteList) -> throw({error, bad_config}) end, + case whereis(error_logger) of + undefined -> + %% On OTP 21 and above, error_logger is deprecated in favor of 'logger' + %% As a band-aid, boot up error_logger anyway and install it as a logger handler + %% we can't use error_logger:add_report_handler because we want supervision of the handler + %% so we have to manually add the logger handler + %% + %% Longer term we should be installing a logger handler instead, but this will bridge the gap + %% for now. + error_logger:start(), + _ = logger:add_handler(error_logger,error_logger,#{level=>info,filter_default=>log}); + _ -> + ok + end, - _ = case supervisor:start_child(lager_handler_watcher_sup, [error_logger, error_logger_lager_h, [HWM, GlStrategy]]) of + %% capture which handlers we removed from error_logger so we can restore them when lager stops + OldHandlers = case supervisor:start_child(lager_handler_watcher_sup, [error_logger, error_logger_lager_h, [HWM, GlStrategy]]) of {ok, _} -> [begin error_logger:delete_report_handler(X), X end || X <- gen_event:which_handlers(error_logger) -- [error_logger_lager_h | WhiteList]]; {error, _} -> [] end, - - Handlers = case application:get_env(lager, handlers) of - undefined -> - [{lager_console_backend, [{level, info}]}, - {lager_file_backend, [{file, "log/error.log"}, {level, error}, {size, 10485760}, {date, "$D0"}, {count, 5}]}, - {lager_file_backend, [{file, "log/console.log"}, {level, info}, {size, 10485760}, {date, "$D0"}, {count, 5}]}]; - {ok, Val} -> - Val - end, - Handlers. + OldHandlers. configure_sink(Sink, SinkDef) -> lager_config:new_sink(Sink), From e372f45261e984d25a59afdedb86266b4949e647 Mon Sep 17 00:00:00 2001 From: Andrew Thompson Date: Wed, 6 Jun 2018 09:49:17 -0700 Subject: [PATCH 2/2] Add OTP 21.0 RC2 to the travis testing temporarily --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 0bbb4df..e90325f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,7 @@ sudo: false language: erlang otp_release: + - 21.0-rc2 - 20.0 - 19.3 - 18.3