diff options
Diffstat (limited to 'src/ejabberd_logger.erl')
-rw-r--r-- | src/ejabberd_logger.erl | 44 |
1 files changed, 42 insertions, 2 deletions
diff --git a/src/ejabberd_logger.erl b/src/ejabberd_logger.erl index 605b1d633..a13ac814a 100644 --- a/src/ejabberd_logger.erl +++ b/src/ejabberd_logger.erl @@ -102,6 +102,29 @@ get_string_env(Name, Default) -> %% @spec () -> ok start() -> + StartedApps = application:which_applications(5000), + case lists:keyfind(logger, 1, StartedApps) of + {logger, _, _} -> + error_logger:info_msg("Ignoring logger options, using Elixir Logger.", []), + %% Do not start lager, we rely on Elixir Logger + do_start_for_logger(); + _ -> + do_start() + end. + +do_start_for_logger() -> + application:load(sasl), + application:set_env(sasl, sasl_error_logger, false), + application:load(lager), + application:set_env(lager, error_logger_redirect, false), + application:set_env(lager, error_logger_whitelist, ['Elixir.Logger.ErrorHandler']), + application:set_env(lager, crash_log, false), + application:set_env(lager, handlers, [{elixir_logger_backend, [{level, debug}]}]), + ejabberd:start_app(lager), + ok. + +%% Start lager +do_start() -> application:load(sasl), application:set_env(sasl, sasl_error_logger, false), application:load(lager), @@ -145,7 +168,7 @@ rotate_log() -> %% @spec () -> {loglevel(), atom(), string()} get() -> - case lager:get_loglevel(lager_console_backend) of + case get_lager_loglevel() of none -> {0, no_log, "No log"}; emergency -> {1, critical, "Critical"}; alert -> {1, critical, "Critical"}; @@ -168,7 +191,7 @@ set(LogLevel) when is_integer(LogLevel) -> 5 -> debug; E -> throw({wrong_loglevel, E}) end, - case lager:get_loglevel(lager_console_backend) of + case get_lager_loglevel() of LagerLogLevel -> ok; _ -> @@ -186,3 +209,20 @@ set(LogLevel) when is_integer(LogLevel) -> set({_LogLevel, _}) -> error_logger:error_msg("custom loglevels are not supported for 'lager'"), {module, lager}. + +get_lager_loglevel() -> + R = case get_lager_handlers() of + [] -> none; + [elixir_logger_backend] -> debug; + [FirstHandler|_] -> + lager:get_loglevel(FirstHandler) + end, + R. + +get_lager_handlers() -> + case catch gen_event:which_handlers(lager_event) of + {'EXIT',noproc} -> + []; + Result -> + Result + end. |