diff options
| author | Luke Bakken <lbakken@pivotal.io> | 2018-11-27 13:34:51 -0800 |
|---|---|---|
| committer | Luke Bakken <lbakken@pivotal.io> | 2018-11-27 14:34:39 -0800 |
| commit | 7dfc3a6ba922bcd8d9a677db46b2f15f3e344b69 (patch) | |
| tree | 1a36a5194426b71c8bbfb38a0edfa2de1c1f3e80 | |
| parent | 0c7c7d960c8ca54b5b29c06d295acef0bc9f3c7a (diff) | |
| download | rabbitmq-server-git-7dfc3a6ba922bcd8d9a677db46b2f15f3e344b69.tar.gz | |
Add method to set log level at runtime
Part of rabbitmq/rabbitmq-cli#276
`rabbit_lager:set_log_level` takes a log level as its only argument and will update all sinks and handlers to the new level
| -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, []), |
