summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Bakken <lbakken@pivotal.io>2018-11-27 13:34:51 -0800
committerLuke Bakken <lbakken@pivotal.io>2018-11-27 14:34:39 -0800
commit7dfc3a6ba922bcd8d9a677db46b2f15f3e344b69 (patch)
tree1a36a5194426b71c8bbfb38a0edfa2de1c1f3e80
parent0c7c7d960c8ca54b5b29c06d295acef0bc9f3c7a (diff)
downloadrabbitmq-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.erl30
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, []),