|
@ -40,6 +40,36 @@ doStart() -> |
|
|
eRum:updateLogevelCfg(?RumDefSink), |
|
|
eRum:updateLogevelCfg(?RumDefSink), |
|
|
SavedHandlers. |
|
|
SavedHandlers. |
|
|
|
|
|
|
|
|
|
|
|
startSink(?RumDefSink) -> doStart(); |
|
|
|
|
|
startSink(Sink) -> |
|
|
|
|
|
AllSinksDef = rumUtil:get_env(extraSinks, []), |
|
|
|
|
|
SinkValue = lists:keyfind(Sink, 1, AllSinksDef), |
|
|
|
|
|
SinkOpts = ?IIF(SinkValue == false, [], element(2, SinkValue)), |
|
|
|
|
|
startSink(Sink, SinkOpts). |
|
|
|
|
|
|
|
|
|
|
|
startSink(Sink, Opts) -> |
|
|
|
|
|
rumConfig:initSink(Sink), |
|
|
|
|
|
ChildId = rumUtil:makeInnerSinkName(Sink), |
|
|
|
|
|
SinkSpec = #{ |
|
|
|
|
|
id => ChildId, |
|
|
|
|
|
start => {gen_event, start_link, [{local, Sink}]}, |
|
|
|
|
|
restart => permanent, |
|
|
|
|
|
shutdown => 5000, |
|
|
|
|
|
type => worker, |
|
|
|
|
|
modules => [dynamic]}, |
|
|
|
|
|
_ = supervisor:start_child(eRum_sup, SinkSpec), |
|
|
|
|
|
tryStartAsyncMgr(proplists:get_value(asyncThreshold, Opts, undefined), proplists:get_value(asyncThresholdWindow, Opts, undefined), Sink), |
|
|
|
|
|
tryInstallKiller(proplists:get_value(killerHwm, Opts, undefined), proplists:get_value(killerReTime, Opts, undefined), Sink), |
|
|
|
|
|
tryStartHandlers(proplists:get_value(handlers, Opts, []), Sink), |
|
|
|
|
|
eRum:updateLogevelCfg(Sink). |
|
|
|
|
|
|
|
|
|
|
|
doStartExtraSink() -> |
|
|
|
|
|
doStartExtraSinks(rumUtil:get_env(extraSinks, [])). |
|
|
|
|
|
|
|
|
|
|
|
doStartExtraSinks(Sinks) -> |
|
|
|
|
|
[startSink(Sink, Opts) || {Sink, Opts} <- Sinks], |
|
|
|
|
|
ok. |
|
|
|
|
|
|
|
|
doStartTraces() -> |
|
|
doStartTraces() -> |
|
|
_ = rumUtil:trace_filter(none), |
|
|
_ = rumUtil:trace_filter(none), |
|
|
ok = addTraces(). |
|
|
ok = addTraces(). |
|
@ -54,18 +84,8 @@ startTrace({Handler, Filter}) -> |
|
|
startTrace({Handler, Filter, Level}) when is_atom(Level) -> |
|
|
startTrace({Handler, Filter, Level}) when is_atom(Level) -> |
|
|
{ok, _} = eRum:trace(Handler, Filter, Level). |
|
|
{ok, _} = eRum:trace(Handler, Filter, Level). |
|
|
|
|
|
|
|
|
doStartExtraSink() -> |
|
|
|
|
|
doStartExtraSinks(rumUtil:get_env(extraSinks, [])). |
|
|
|
|
|
|
|
|
|
|
|
startSink(?RumDefSink) -> doStart(); |
|
|
|
|
|
startSink(Sink) -> |
|
|
|
|
|
AllSinksDef = rumUtil:get_env(extraSinks, []), |
|
|
|
|
|
SinkValue = lists:keyfind(Sink, 1, AllSinksDef), |
|
|
|
|
|
SinkOpts = ?IIF(SinkValue == false, [], element(2, SinkValue)), |
|
|
|
|
|
startSink(Sink, SinkOpts). |
|
|
|
|
|
|
|
|
|
|
|
stop(Handlers) -> |
|
|
stop(Handlers) -> |
|
|
[error_logger:add_report_handler(Handler) || Handler <- Handlers], |
|
|
|
|
|
|
|
|
[error_logger:add_report_handler(Handler) || Handler <- Handlers], |
|
|
rumConfig:cleanup(). |
|
|
rumConfig:cleanup(). |
|
|
|
|
|
|
|
|
tryStartAsyncMgr(undefined, _Window, _Sink) -> |
|
|
tryStartAsyncMgr(undefined, _Window, _Sink) -> |
|
@ -100,18 +120,19 @@ doStartHandlers([], _Sink, _NameAcc, HandlerAcc) -> |
|
|
HandlerAcc; |
|
|
HandlerAcc; |
|
|
doStartHandlers([OneHandler | Handlers], Sink, NameAcc, HandlerAcc) -> |
|
|
doStartHandlers([OneHandler | Handlers], Sink, NameAcc, HandlerAcc) -> |
|
|
{Module, Options} = parseHandlers(OneHandler), |
|
|
{Module, Options} = parseHandlers(OneHandler), |
|
|
NewNameAcc = case Module of |
|
|
|
|
|
{rumBackendFile, F} -> |
|
|
|
|
|
case lists:member(F, NameAcc) of |
|
|
|
|
|
true -> |
|
|
|
|
|
error_logger:error_msg("Cannot have same file (~p) in multiple file backends~n", [F]), |
|
|
|
|
|
throw({error, bad_config}); |
|
|
|
|
|
_ -> |
|
|
|
|
|
[F | NameAcc] |
|
|
|
|
|
end; |
|
|
|
|
|
_ -> |
|
|
|
|
|
NameAcc |
|
|
|
|
|
end, |
|
|
|
|
|
|
|
|
NewNameAcc = |
|
|
|
|
|
case Module of |
|
|
|
|
|
{rumBackendFile, F} -> |
|
|
|
|
|
case lists:member(F, NameAcc) of |
|
|
|
|
|
true -> |
|
|
|
|
|
error_logger:error_msg("Cannot have same file (~p) in multiple file backends~n", [F]), |
|
|
|
|
|
throw({error, bad_config}); |
|
|
|
|
|
_ -> |
|
|
|
|
|
[F | NameAcc] |
|
|
|
|
|
end; |
|
|
|
|
|
_ -> |
|
|
|
|
|
NameAcc |
|
|
|
|
|
end, |
|
|
|
|
|
|
|
|
HandlerRet = startHandler(Sink, Module, Options), |
|
|
HandlerRet = startHandler(Sink, Module, Options), |
|
|
doStartHandlers(Handlers, Sink, NewNameAcc, [HandlerRet | HandlerAcc]). |
|
|
doStartHandlers(Handlers, Sink, NewNameAcc, [HandlerRet | HandlerAcc]). |
|
@ -159,26 +180,6 @@ tryRemoveLoggerHandler() -> |
|
|
error_logger:error_msg("calling logger:remove_handler(default) failed: ~p ~p", [Err, Reason]) |
|
|
error_logger:error_msg("calling logger:remove_handler(default) failed: ~p ~p", [Err, Reason]) |
|
|
end. |
|
|
end. |
|
|
|
|
|
|
|
|
doStartExtraSinks(Sinks) -> |
|
|
|
|
|
[startSink(Sink, Opts) || {Sink, Opts} <- Sinks], |
|
|
|
|
|
ok. |
|
|
|
|
|
|
|
|
|
|
|
startSink(Sink, Opts) -> |
|
|
|
|
|
rumConfig:initSink(Sink), |
|
|
|
|
|
ChildId = rumUtil:makeInnerSinkName(Sink), |
|
|
|
|
|
SinkSpec = #{ |
|
|
|
|
|
id => ChildId, |
|
|
|
|
|
start => {gen_event, start_link, [{local, Sink}]}, |
|
|
|
|
|
restart => permanent, |
|
|
|
|
|
shutdown => 5000, |
|
|
|
|
|
type => worker, |
|
|
|
|
|
modules => [dynamic]}, |
|
|
|
|
|
_ = supervisor:start_child(eRum_sup,SinkSpec), |
|
|
|
|
|
tryStartAsyncMgr(proplists:get_value(asyncThreshold, Opts), proplists:get_value(asyncThresholdWindow, Opts), Sink), |
|
|
|
|
|
tryInstallKiller(proplists:get_value(killerHwm, Opts), proplists:get_value(killerReTime, Opts), Sink), |
|
|
|
|
|
tryStartHandlers(proplists:get_value(handlers, Opts, []), Sink), |
|
|
|
|
|
eRum:updateLogevelCfg(Sink). |
|
|
|
|
|
|
|
|
|
|
|
parseHandlers([]) -> |
|
|
parseHandlers([]) -> |
|
|
[]; |
|
|
[]; |
|
|
parseHandlers([{lager_file_backend, [{Key, _Value} | _] = Config} | T]) when is_atom(Key) -> |
|
|
parseHandlers([{lager_file_backend, [{Key, _Value} | _] = Config} | T]) when is_atom(Key) -> |
|
|