|
|
@ -98,9 +98,9 @@ tryStartAsyncMgr(undefined, _Window, _Sink) -> |
|
|
|
tryStartAsyncMgr(Threshold, Window, Sink) -> |
|
|
|
case Window of |
|
|
|
undefined -> |
|
|
|
supervisor:start_child(lgHWatcherSup, [Sink, lgBkdThrottle, [Threshold, erlang:trunc(Threshold * 0.2)]]); |
|
|
|
supervisor:start_child(lgHWatcherSup, [Sink, lgBkdThrottle, [Sink, Threshold, erlang:trunc(Threshold * 0.2)]]); |
|
|
|
_ -> |
|
|
|
supervisor:start_child(lgHWatcherSup, [Sink, lgBkdThrottle, [Threshold, Window]]) |
|
|
|
supervisor:start_child(lgHWatcherSup, [Sink, lgBkdThrottle, [Sink, Threshold, Window]]) |
|
|
|
end, |
|
|
|
ok. |
|
|
|
|
|
|
@ -124,16 +124,16 @@ tryStartHandlers(Handlers, Sink) -> |
|
|
|
doStartHandlers([], _Sink, _NameAcc, HandlerAcc) -> |
|
|
|
HandlerAcc; |
|
|
|
doStartHandlers([OneHandler | Handlers], Sink, NameAcc, HandlerAcc) -> |
|
|
|
{Module, Options} = parseHandlers(OneHandler), |
|
|
|
{Module, Options} = tryMakeHandlerId(OneHandler), |
|
|
|
NewNameAcc = |
|
|
|
case Module of |
|
|
|
{lgBkFile, F} -> |
|
|
|
case lists:member(F, NameAcc) of |
|
|
|
{lgBkFile, FId} -> |
|
|
|
case lists:member(FId, NameAcc) of |
|
|
|
true -> |
|
|
|
error_logger:error_msg(<<"Cannot have same file (~p) in multiple file backends~n">>, [F]), |
|
|
|
error_logger:error_msg(<<"Cannot have same file (~p) in multiple file backends~n">>, [FId]), |
|
|
|
throw({error, bad_config}); |
|
|
|
_ -> |
|
|
|
[F | NameAcc] |
|
|
|
[FId | NameAcc] |
|
|
|
end; |
|
|
|
_ -> |
|
|
|
NameAcc |
|
|
@ -167,14 +167,12 @@ tryStartErrLoggerHandler(_ErrLoggerRedirect, Hwm, WhiteList) -> |
|
|
|
|
|
|
|
%% capture which handlers we removed from error_logger so we can restore them when eLog stops |
|
|
|
%% 捕获从error_logger中删除的处理程序,以便在eLog停止时恢复它们 |
|
|
|
OldHandlers = |
|
|
|
case supervisor:start_child(lgHWatcherSup, [error_logger, lgErrLoggerH, [Hwm, lgUtil:get_env(errLoggerGLS, handle)]]) of |
|
|
|
{ok, _} -> |
|
|
|
[begin error_logger:delete_report_handler(X), X end || X <- gen_event:which_handlers(error_logger) -- [lgErrLoggerH | WhiteList]]; |
|
|
|
{error, _} -> |
|
|
|
[] |
|
|
|
end, |
|
|
|
OldHandlers. |
|
|
|
case supervisor:start_child(lgHWatcherSup, [error_logger, lgErrLoggerH, [Hwm, lgUtil:get_env(errLoggerGLS, handle)]]) of |
|
|
|
{ok, _} -> |
|
|
|
[begin error_logger:delete_report_handler(X), X end || X <- gen_event:which_handlers(error_logger) -- [lgErrLoggerH | WhiteList]]; |
|
|
|
{error, _} -> |
|
|
|
[] |
|
|
|
end. |
|
|
|
|
|
|
|
%% 在OTP 21.1及更高版本上,我们需要删除`default' handler。但是它可能不存在,因此我们将其包装在try-catch块中 |
|
|
|
tryRemoveLoggerHandler() -> |
|
|
@ -186,25 +184,11 @@ tryRemoveLoggerHandler() -> |
|
|
|
error_logger:error_msg(<<"calling logger:remove_handler(default) failed: ~p ~p">>, [Err, Reason]) |
|
|
|
end. |
|
|
|
|
|
|
|
parseHandlers([]) -> |
|
|
|
[]; |
|
|
|
parseHandlers({lgBkdFile, Config}) -> |
|
|
|
%% this is definitely a new-style config, no expansion needed |
|
|
|
maybe_make_handler_id(lgBkdFile, Config); |
|
|
|
parseHandlers({Mod, Config}) -> |
|
|
|
maybe_make_handler_id(Mod, Config). |
|
|
|
|
|
|
|
maybe_make_handler_id(Mod, Config) -> |
|
|
|
%% Allow the backend to generate a gen_event handler id, if it wants to. |
|
|
|
%% We don't use erlang:function_exported here because that requires the module |
|
|
|
%% already be loaded, which is unlikely at this phase of startup. Using code:load |
|
|
|
%% caused undesirable side-effects with generating code-coverage reports. |
|
|
|
|
|
|
|
tryMakeHandlerId({Mod, Config}) -> |
|
|
|
%%允许后端生成gen_event处理程序id,如果它愿意的话。 |
|
|
|
%%这里我们没有使用erlang:function_exported,因为这需要用到模块 |
|
|
|
%%已经加载,这在启动阶段是不太可能的。使用代码:负载 |
|
|
|
%%会在生成代码覆盖率报告时产生不良的副作用。 |
|
|
|
|
|
|
|
try Mod:configToId(Config) of |
|
|
|
Id -> |
|
|
|
{Id, Config} |
|
|
|