diff --git a/src/eRum_app.erl b/src/eRum_app.erl index b5bc7db..c006aa7 100644 --- a/src/eRum_app.erl +++ b/src/eRum_app.erl @@ -40,6 +40,36 @@ doStart() -> eRum:updateLogevelCfg(?RumDefSink), 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() -> _ = rumUtil:trace_filter(none), ok = addTraces(). @@ -54,18 +84,8 @@ startTrace({Handler, Filter}) -> startTrace({Handler, Filter, Level}) when is_atom(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) -> - [error_logger:add_report_handler(Handler) || Handler <- Handlers], + [error_logger:add_report_handler(Handler) || Handler <- Handlers], rumConfig:cleanup(). tryStartAsyncMgr(undefined, _Window, _Sink) -> @@ -100,18 +120,19 @@ doStartHandlers([], _Sink, _NameAcc, HandlerAcc) -> HandlerAcc; doStartHandlers([OneHandler | Handlers], Sink, NameAcc, HandlerAcc) -> {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), 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]) 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([{lager_file_backend, [{Key, _Value} | _] = Config} | T]) when is_atom(Key) ->