diff options
| author | Michael Klishin <michael@novemberain.com> | 2018-11-29 00:29:20 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-11-29 00:29:20 +0800 |
| commit | 8132b6eac1a7a0b3fb56c4a9a2202ab7d5a43279 (patch) | |
| tree | 1271cdf916258c4ec9ebb8ba6a37d80c8bb6aae9 | |
| parent | 46612a15dac1112c78d96c2d6fc9e2d38d03893a (diff) | |
| parent | 7dfc3a6ba922bcd8d9a677db46b2f15f3e344b69 (diff) | |
| download | rabbitmq-server-git-8132b6eac1a7a0b3fb56c4a9a2202ab7d5a43279.tar.gz | |
Merge pull request #1776 from rabbitmq/rabbitmq-cli-276
Add function to set log level at runtime
| -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, []), |
