소스 검색

ft: eRum_app 修改

master
SisMaker 4 년 전
부모
커밋
3077dd8212
1개의 변경된 파일57개의 추가작업 그리고 54개의 파일을 삭제
  1. +57
    -54
      src/eRum_app.erl

+ 57
- 54
src/eRum_app.erl 파일 보기

@ -9,9 +9,9 @@
, start/2
, stop/1
, doStart/0
, doStart/1
, doStartExtraSink/1
, startHandler/3
, configure_sink/2
, startSink/2
]).
@ -22,8 +22,8 @@ start() ->
start(_StartType, _StartArgs) ->
{ok, Pid} = eRum_sup:start_link(),
SavedHandlers = doStart(),
_ = doStart('__all_extra'),
_ = doStart('__traces'),
_ = doStartExtraSink(),
doStartTraces(),
{ok, Pid, SavedHandlers}.
%% (sink)
@ -42,27 +42,35 @@ doStart() ->
eRum:updateLogevelCfg(?RumDefSink),
SavedHandlers.
doStart('__traces') ->
doStartTraces() ->
_ = rumUtil:trace_filter(none),
ok = add_configured_traces();
ok = addTraces().
doStart('__all_extra') ->
doStartExtraSinks(rumUtil:get_env(extra_sinks, []));
addTraces() ->
Traces = rumUtil:get_env(traces, []),
[startTrace(One) || One <- Traces],
ok.
startTrace({Handler, Filter}) ->
{ok, _} = eRum:trace(Handler, Filter);
startTrace({Handler, Filter, Level}) when is_atom(Level) ->
{ok, _} = eRum:trace(Handler, Filter, Level).
doStartExtraSink() ->
doStartExtraSinks(rumUtil:get_env(extra_sinks, [])).
doStart(?RumDefSink) -> doStart();
doStart(Sink) ->
doStartExtraSink(?RumDefSink) -> doStart();
doStartExtraSink(Sink) ->
AllSinksDef = rumUtil:get_env(extra_sinks, []),
boot_sink(Sink, lists:keyfind(Sink, 1, AllSinksDef)).
boot_sink(Sink, {Sink, Def}) ->
configure_sink(Sink, Def);
startSink(Sink, Def);
boot_sink(Sink, false) ->
configure_sink(Sink, []).
startSink(Sink, []).
stop(Handlers) ->
lists:foreach(fun(Handler) ->
error_logger:add_report_handler(Handler)
end, Handlers),
[error_logger:add_report_handler(Handler) || Handler <- Handlers],
rumConfig:cleanup().
tryStartAsyncMgr(undefined, _Window, _SinkS) ->
@ -96,18 +104,18 @@ tryStartHandlers(Handlers, Sink) ->
doStartHandlers([], _Sink, _NameAcc, HandlerAcc) ->
HandlerAcc;
doStartHandlers([OneHandler | Handlers], Sink, NameAcc, HandlerAcc) ->
{Module, Options} = expand_handlers(OneHandler),
case Module of
{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});
_ ->
NewNameAcc = [F | NameAcc]
[F | NameAcc]
end;
_ ->
NewNameAcc = NameAcc
NameAcc
end,
HandlerRet = startHandler(Sink, Module, Options),
@ -156,58 +164,53 @@ tryRemoveLoggerHandler() ->
error_logger:error_msg("calling logger:remove_handler(default) failed: ~p ~p", [Err, Reason])
end.
configure_sink(Sink, SinkDef) ->
doStartExtraSinks(Sinks) ->
[startSink(Sink, Opts) || {Sink, Opts} <- Sinks],
ok.
startSink(Sink, SinkDef) ->
rumConfig:initSink(Sink),
ChildId = rumUtil:makeInnerSinkName(Sink),
_ = supervisor:start_child(eRum_sup, {ChildId, {gen_event, start_link, [{local, Sink}]}, permanent, 5000, worker, dynamic}),
tryStartAsyncMgr(Sink, proplists:get_value(asyncThreshold, SinkDef), proplists:get_value(asyncThresholdWindow, SinkDef)),
_ = tryInstallKiller(Sink, proplists:get_value(killerHwm, SinkDef), proplists:get_value(killerReTime, SinkDef)),
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, SinkDef), proplists:get_value(asyncThresholdWindow, SinkDef), Sink),
tryInstallKiller(proplists:get_value(killerHwm, SinkDef), proplists:get_value(killerReTime, SinkDef), Sink),
tryStartHandlers(proplists:get_value(handlers, SinkDef, []), Sink),
eRum:updateLogevelCfg(Sink).
doStartExtraSinks(Sinks) ->
[configure_sink(Sink, Opts) || {Sink, Opts} <- Sinks],
ok.
expand_handlers([]) ->
parseHandlers([]) ->
[];
expand_handlers([{lager_file_backend, [{Key, _Value} | _] = Config} | T]) when is_atom(Key) ->
parseHandlers([{lager_file_backend, [{Key, _Value} | _] = Config} | T]) when is_atom(Key) ->
%% this is definitely a new-style config, no expansion needed
[maybe_make_handler_id(lager_file_backend, Config) | expand_handlers(T)];
expand_handlers([{lager_file_backend, Configs} | T]) ->
[maybe_make_handler_id(lager_file_backend, Config) | parseHandlers(T)];
parseHandlers([{lager_file_backend, Configs} | T]) ->
?INT_LOG(notice, "Deprecated lager_file_backend config detected, please consider updating it", []),
[{rumBackendFile:config_to_id(Config), Config} || Config <- Configs] ++
expand_handlers(T);
expand_handlers([{Mod, Config} | T]) when is_atom(Mod) ->
[maybe_make_handler_id(Mod, Config) | expand_handlers(T)];
expand_handlers([H | T]) ->
[H | expand_handlers(T)].
add_configured_traces() ->
Traces = case application:get_env(lager, traces) of
undefined ->
[];
{ok, TraceVal} ->
TraceVal
end,
lists:foreach(fun start_configured_trace/1, Traces),
ok.
start_configured_trace({Handler, Filter}) ->
{ok, _} = eRum:trace(Handler, Filter);
start_configured_trace({Handler, Filter, Level}) when is_atom(Level) ->
{ok, _} = eRum:trace(Handler, Filter, Level).
parseHandlers(T);
parseHandlers([{Mod, Config} | T]) when is_atom(Mod) ->
[maybe_make_handler_id(Mod, Config) | parseHandlers(T)];
parseHandlers([H | T]) ->
[H | parseHandlers(T)].
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.
%%gen_event处理程序id
%%使erlang:function_exported
%%使:
%%
try Mod:config_to_id(Config) of
Id ->
{Id, Config}

불러오는 중...
취소
저장