Commit 52b52aac authored by Mark Allen's avatar Mark Allen
Browse files

Merge branch 'dz-groupleader-strategies' of https://github.com/DeadZen/lager into intg

Showing with 33 additions and 5 deletions
+33 -5
......@@ -41,7 +41,9 @@
%% the current second
lasttime = os:timestamp() :: erlang:timestamp(),
%% count of dropped messages this second
dropped = 0 :: non_neg_integer()
dropped = 0 :: non_neg_integer(),
%% group leader strategy
groupleader_strategy :: handle | ignore | mirror
}).
-define(LOGMSG(Level, Pid, Msg),
......@@ -74,16 +76,27 @@ set_high_water(N) ->
gen_event:call(error_logger, ?MODULE, {set_high_water, N}, infinity).
-spec init(any()) -> {ok, #state{}}.
init([HighWaterMark]) ->
{ok, #state{hwm=HighWaterMark}}.
init([HighWaterMark, GlStrategy]) ->
{ok, #state{hwm=HighWaterMark, groupleader_strategy=GlStrategy}}.
handle_call({set_high_water, N}, State) ->
{ok, ok, State#state{hwm = N}};
handle_call(_Request, State) ->
{ok, unknown_call, State}.
handle_event(Event, State) ->
handle_event(Event, #state{groupleader_strategy=GlStrategy0}=State) ->
case check_hwm(State) of
{true, NewState} when is_pid(element(2, Event)) ->
case element(2, Event) of
GL when node(GL) =/= node(), GlStrategy0 =:= ignore ->
gen_event:notify({error_logger, node(GL)}, Event),
{ok, State};
GL when node(GL) =/= node(), GlStrategy0 =:= mirror ->
gen_event:notify({error_logger, node(GL)}, Event),
log_event(Event, NewState);
_ ->
log_event(Event, NewState)
end;
{true, NewState} ->
log_event(Event, NewState);
{false, NewState} ->
......
......@@ -128,7 +128,22 @@ start_error_logger_handler({ok, false}, _HWM, _Whitelist) ->
start_error_logger_handler(_, HWM, undefined) ->
start_error_logger_handler(ignore_me, HWM, {ok, []});
start_error_logger_handler(_, HWM, {ok, WhiteList}) ->
case supervisor:start_child(lager_handler_watcher_sup, [error_logger, error_logger_lager_h, [HWM]]) of
GlStrategy = case application:get_env(lager, error_logger_groupleader_strategy) of
undefined ->
handle;
{ok, GlStrategy0} when
GlStrategy0 =:= handle;
GlStrategy0 =:= ignore;
GlStrategy0 =:= mirror ->
GlStrategy0;
{ok, BadGlStrategy} ->
error_logger:error_msg(
"Invalid value for 'error_logger_groupleader_strategy': ~p~n",
[BadGlStrategy]),
throw({error, bad_config})
end,
case supervisor:start_child(lager_handler_watcher_sup, [error_logger, error_logger_lager_h, [HWM, GlStrategy]]) of
{ok, _} ->
[begin error_logger:delete_report_handler(X), X end ||
X <- gen_event:which_handlers(error_logger) -- [error_logger_lager_h | WhiteList]];
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment