|
|
@ -9,7 +9,7 @@ |
|
|
|
, start/2 |
|
|
|
, stop/1 |
|
|
|
, doStart/1 |
|
|
|
, start_handler/3 |
|
|
|
, startHandler/3 |
|
|
|
, configure_sink/2 |
|
|
|
]). |
|
|
|
|
|
|
@ -32,16 +32,12 @@ boot() -> |
|
|
|
|
|
|
|
tryInstallKiller(rumUtil:get_env(killerHwm, undefined), rumUtil:get_env(killerReTime, undefined), ?RumDefSink), |
|
|
|
|
|
|
|
start_handlers(rumUtil:get_env(handlers, ?RumDefHandler), ?RumDefSink), |
|
|
|
tryStartHandlers(rumUtil:get_env(handlers, ?RumDefHandler), ?RumDefSink), |
|
|
|
|
|
|
|
eRum:update_loglevel_config(?RumDefSink), |
|
|
|
|
|
|
|
SavedHandlers = start_error_logger_handler( |
|
|
|
application:get_env(lager, error_logger_redirect, true), |
|
|
|
interpret_hwm(application:get_env(lager, error_logger_hwm, 0)), |
|
|
|
application:get_env(lager, error_logger_whitelist, []) |
|
|
|
), |
|
|
|
|
|
|
|
SavedHandlers = start_error_logger_handler(rumUtil:get_env(error_logger_redirect, true), rumUtil:get_env(error_logger_hwm, 0), rumUtil:get_env(error_logger_whitelist, [])), |
|
|
|
eRum:update_loglevel_config(?RumDefSink), |
|
|
|
SavedHandlers. |
|
|
|
|
|
|
|
doStart('__traces') -> |
|
|
@ -88,52 +84,37 @@ tryInstallKiller(HWM, ReTime, Sink) -> |
|
|
|
end, |
|
|
|
ok. |
|
|
|
|
|
|
|
start_handlers(undefined, _Sink) -> ok; |
|
|
|
start_handlers(Handlers, _Sink) when not is_list(Handlers) -> |
|
|
|
error_logger:error_msg("Invalid value for 'handlers' (must be list): ~p~n", [Handlers]), |
|
|
|
throw({error, bad_config}); |
|
|
|
start_handlers(Sink, Handlers) -> |
|
|
|
%% handlers failing to start are handled in the handler_watcher |
|
|
|
rumConfig:global_set(handlers, |
|
|
|
rumConfig:global_get(handlers, []) ++ |
|
|
|
lists:map( |
|
|
|
fun |
|
|
|
({Module, Config}) -> |
|
|
|
check_handler_config(Module, Config), |
|
|
|
start_handler(Sink, Module, Config); |
|
|
|
(_) -> |
|
|
|
throw({error, bad_config}) |
|
|
|
end, |
|
|
|
expand_handlers(Handlers))), |
|
|
|
tryStartHandlers(undefined, _Sink) -> ok; |
|
|
|
tryStartHandlers(Handlers, Sink) -> |
|
|
|
%% 启动失败的处理程序将在handler_watcher中处理 |
|
|
|
NewHandler = doStartHandlers(Handlers, Sink, [], []), |
|
|
|
rumConfig:global_set(handlers, rumConfig:global_get(handlers, []) ++ NewHandler), |
|
|
|
ok. |
|
|
|
|
|
|
|
start_handler(Sink, Module, Config) -> |
|
|
|
{ok, Watcher} = supervisor:start_child(lager_handler_watcher_sup, [Sink, Module, Config]), |
|
|
|
{Module, Watcher, Sink}. |
|
|
|
|
|
|
|
check_handler_config({lager_file_backend, F}, Config) when is_list(Config); is_tuple(Config) -> |
|
|
|
Fs = |
|
|
|
case get(?RumPdLogNames) of |
|
|
|
undefined -> ordsets:new(); |
|
|
|
X -> X |
|
|
|
doStartHandlers([], _Sink, _NameAcc, HandlerAcc) -> |
|
|
|
HandlerAcc; |
|
|
|
doStartHandlers([OneHandler | Handlers], Sink, NameAcc, HandlerAcc) -> |
|
|
|
{Module, Options} = expand_handlers(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, |
|
|
|
case ordsets:is_element(F, Fs) of |
|
|
|
true -> |
|
|
|
error_logger:error_msg( |
|
|
|
"Cannot have same file (~p) in multiple file backends~n", [F]), |
|
|
|
throw({error, bad_config}); |
|
|
|
false -> |
|
|
|
put(?RumPdLogNames, |
|
|
|
ordsets:add_element(F, Fs)) |
|
|
|
end, |
|
|
|
ok; |
|
|
|
check_handler_config(_Handler, Config) when is_list(Config) orelse is_atom(Config) -> |
|
|
|
ok; |
|
|
|
check_handler_config(Handler, _BadConfig) -> |
|
|
|
throw({error, {bad_config, Handler}}). |
|
|
|
|
|
|
|
clean_up_config_checks() -> |
|
|
|
erase(?RumPdLogNames). |
|
|
|
HandlerRet = startHandler(Sink, Module, Options), |
|
|
|
doStartHandlers(Handlers, Sink, NewNameAcc, [HandlerRet | HandlerAcc]). |
|
|
|
|
|
|
|
startHandler(Sink, Module, Config) -> |
|
|
|
{ok, Watcher} = supervisor:start_child(rumHWatcherSup, [Sink, Module, Config]), |
|
|
|
{Module, Watcher, Sink}. |
|
|
|
|
|
|
|
interpret_hwm(undefined) -> |
|
|
|
undefined; |
|
|
@ -210,7 +191,7 @@ configure_sink(Sink, SinkDef) -> |
|
|
|
tryStartAsyncMgr(Sink, proplists:get_value(asyncThreshold, SinkDef), proplists:get_value(asyncThresholdWindow, SinkDef)), |
|
|
|
_ = tryInstallKiller(Sink, proplists:get_value(killerHwm, SinkDef), |
|
|
|
proplists:get_value(killerReTime, SinkDef)), |
|
|
|
start_handlers(Sink, proplists:get_value(handlers, SinkDef, [])), |
|
|
|
tryStartHandlers(proplists:get_value(handlers, SinkDef, []), Sink), |
|
|
|
eRum:update_loglevel_config(Sink). |
|
|
|
|
|
|
|
|
|
|
|