Skip to content

Commit 7dfc3a6

Browse files
committed
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
1 parent 0c7c7d9 commit 7dfc3a6

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

src/rabbit_lager.erl

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
%% API
2222
-export([start_logger/0, log_locations/0, fold_sinks/2,
23-
broker_is_started/0]).
23+
broker_is_started/0, set_log_level/1]).
2424

2525
%% For test purposes
2626
-export([configure_lager/0]).
@@ -56,6 +56,34 @@ broker_is_started() ->
5656
ok
5757
end.
5858

59+
set_log_level(Level) ->
60+
IsValidLevel = lists:member(Level, lager_util:levels()),
61+
set_log_level(IsValidLevel, Level).
62+
63+
set_log_level(true, Level) ->
64+
SinksAndHandlers = [{Sink, gen_event:which_handlers(Sink)} ||
65+
Sink <- lager:list_all_sinks()],
66+
set_sink_log_level(SinksAndHandlers, Level);
67+
set_log_level(_, Level) ->
68+
{error, {invalid_log_level, Level}}.
69+
70+
set_sink_log_level([], _Level) ->
71+
ok;
72+
set_sink_log_level([{Sink, Handlers}|Rest], Level) ->
73+
set_sink_handler_log_level(Sink, Handlers, Level),
74+
set_sink_log_level(Rest, Level).
75+
76+
set_sink_handler_log_level(_Sink, [], _Level) ->
77+
ok;
78+
set_sink_handler_log_level(Sink, [Handler|Rest], Level) when is_atom(Handler) ->
79+
ok = lager:set_loglevel(Sink, Handler, undefined, Level),
80+
set_sink_handler_log_level(Sink, Rest, Level);
81+
set_sink_handler_log_level(Sink, [{Handler, Id}|Rest], Level) ->
82+
ok = lager:set_loglevel(Sink, Handler, Id, Level),
83+
set_sink_handler_log_level(Sink, Rest, Level);
84+
set_sink_handler_log_level(Sink, [_|Rest], Level) ->
85+
set_sink_handler_log_level(Sink, Rest, Level).
86+
5987
log_locations() ->
6088
ensure_lager_configured(),
6189
DefaultHandlers = application:get_env(lager, handlers, []),

0 commit comments

Comments
 (0)