diff options
| -rw-r--r-- | src/rabbit_lager.erl | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/src/rabbit_lager.erl b/src/rabbit_lager.erl index 21934b5941..da40f207de 100644 --- a/src/rabbit_lager.erl +++ b/src/rabbit_lager.erl @@ -20,7 +20,7 @@ %% API -export([start_logger/0, log_locations/0, fold_sinks/2, - broker_is_started/0]). + broker_is_started/0, set_log_level/1]). %% For test purposes -export([configure_lager/0]). @@ -56,6 +56,34 @@ broker_is_started() -> ok end. +set_log_level(Level) -> + IsValidLevel = lists:member(Level, lager_util:levels()), + set_log_level(IsValidLevel, Level). + +set_log_level(true, Level) -> + SinksAndHandlers = [{Sink, gen_event:which_handlers(Sink)} || + Sink <- lager:list_all_sinks()], + set_sink_log_level(SinksAndHandlers, Level); +set_log_level(_, Level) -> + {error, {invalid_log_level, Level}}. + +set_sink_log_level([], _Level) -> + ok; +set_sink_log_level([{Sink, Handlers}|Rest], Level) -> + set_sink_handler_log_level(Sink, Handlers, Level), + set_sink_log_level(Rest, Level). + +set_sink_handler_log_level(_Sink, [], _Level) -> + ok; +set_sink_handler_log_level(Sink, [Handler|Rest], Level) when is_atom(Handler) -> + ok = lager:set_loglevel(Sink, Handler, undefined, Level), + set_sink_handler_log_level(Sink, Rest, Level); +set_sink_handler_log_level(Sink, [{Handler, Id}|Rest], Level) -> + ok = lager:set_loglevel(Sink, Handler, Id, Level), + set_sink_handler_log_level(Sink, Rest, Level); +set_sink_handler_log_level(Sink, [_|Rest], Level) -> + set_sink_handler_log_level(Sink, Rest, Level). + log_locations() -> ensure_lager_configured(), DefaultHandlers = application:get_env(lager, handlers, []), |
