diff --git a/src/ejabberd_logger.erl b/src/ejabberd_logger.erl index a13ac814a..795d4f390 100644 --- a/src/ejabberd_logger.erl +++ b/src/ejabberd_logger.erl @@ -104,8 +104,10 @@ get_string_env(Name, Default) -> start() -> StartedApps = application:which_applications(5000), case lists:keyfind(logger, 1, StartedApps) of + %% Elixir logger is started. We assume everything is in place + %% to use lager to Elixir logger bridge. {logger, _, _} -> - error_logger:info_msg("Ignoring logger options, using Elixir Logger.", []), + error_logger:info_msg("Ignoring ejabberd logger options, using Elixir Logger.", []), %% Do not start lager, we rely on Elixir Logger do_start_for_logger(); _ -> @@ -119,7 +121,7 @@ do_start_for_logger() -> 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}]}]), + application:set_env(lager, handlers, [{elixir_logger_backend, [{level, info}]}]), ejabberd:start_app(lager), ok. @@ -201,6 +203,8 @@ set(LogLevel) when is_integer(LogLevel) -> lager:set_loglevel(H, LagerLogLevel); (lager_console_backend = H) -> lager:set_loglevel(H, LagerLogLevel); + (elixir_logger_backend = H) -> + lager:set_loglevel(H, LagerLogLevel); (_) -> ok end, gen_event:which_handlers(lager_event)) @@ -211,13 +215,15 @@ set({_LogLevel, _}) -> {module, lager}. get_lager_loglevel() -> - R = case get_lager_handlers() of - [] -> none; - [elixir_logger_backend] -> debug; - [FirstHandler|_] -> - lager:get_loglevel(FirstHandler) - end, - R. + Handlers = get_lager_handlers(), + lists:foldl(fun(lager_console_backend, _Acc) -> + lager:get_loglevel(lager_console_backend); + (elixir_logger_backend, _Acc) -> + lager:get_loglevel(elixir_logger_backend); + (_, Acc) -> + Acc + end, + none, Handlers). get_lager_handlers() -> case catch gen_event:which_handlers(lager_event) of diff --git a/src/elixir_logger_backend.erl b/src/elixir_logger_backend.erl index 583d46a5c..c055853f7 100644 --- a/src/elixir_logger_backend.erl +++ b/src/elixir_logger_backend.erl @@ -30,15 +30,19 @@ -export([init/1, handle_call/2, handle_event/2, handle_info/2, terminate/2, code_change/3]). -init(_Opts) -> - State = [], +-record(state, {level = debug}). + +init(Opts) -> + Level = proplists:get_value(level, Opts, debug), + State = #state{level = Level}, {ok, State}. %% @private handle_event({log, LagerMsg}, State) -> #{mode := Mode, truncate := Truncate, level := MinLevel, utc_log := UTCLog} = 'Elixir.Logger.Config':'__data__'(), MsgLevel = severity_to_level(lager_msg:severity(LagerMsg)), - case {lager_util:is_loggable(LagerMsg, lager_util:level_to_num(debug), ?MODULE), 'Elixir.Logger':compare_levels(MsgLevel, MinLevel)} of + case {lager_util:is_loggable(LagerMsg, lager_util:level_to_num(State#state.level), ?MODULE), + 'Elixir.Logger':compare_levels(MsgLevel, MinLevel)} of {_, lt}-> {ok, State}; {true, _} -> @@ -55,13 +59,15 @@ handle_event({log, LagerMsg}, State) -> _ -> {ok, State} end; -handle_event(_, State) -> +handle_event(_Msg, State) -> {ok, State}. %% @private %% TODO Handle loglevels -handle_call(_Msg, State) -> - {ok, ok, State}. +handle_call(get_loglevel, State) -> + {ok, lager_util:config_to_mask(State#state.level), State}; +handle_call({set_loglevel, Config}, State) -> + {ok, ok, State#state{level = Config}}. %% @private handle_info(_Msg, State) -> @@ -77,7 +83,8 @@ code_change(_OldVsn, State, _Extra) -> notify(sync, Msg) -> gen_event:sync_notify('Elixir.Logger', Msg); -notify(async, Msg) -> gen_event:notify('Elixir.Logger', Msg). +notify(async, Msg) -> + gen_event:notify('Elixir.Logger', Msg). normalize_pid(Metadata) -> case proplists:get_value(pid, Metadata) of