Browse Source

ft: 代码整理

master
SisMaker 3 years ago
parent
commit
8063f28d66
12 changed files with 78 additions and 84 deletions
  1. +1
    -1
      README.md
  2. +1
    -1
      eLog.sample.config
  3. +4
    -4
      include/lgDef.hrl
  4. +1
    -1
      src/backend/lgBkdConsole.erl
  5. +9
    -17
      src/backend/lgBkdFile.erl
  6. +7
    -6
      src/crashLog/lgCrashLog.erl
  7. +29
    -28
      src/eLog.erl
  8. +6
    -6
      src/eLog_app.erl
  9. +6
    -6
      src/errLogger/lgErrLoggerH.erl
  10. +9
    -9
      src/mgrKiller/lgMgrKiller.erl
  11. +4
    -4
      src/utils/lgUtil.erl
  12. +1
    -1
      src/watcher/lgHWatcherSrv.erl

+ 1
- 1
README.md View File

@ -134,7 +134,7 @@ Examples:
错误记录器集成 错误记录器集成
------------------------ ------------------------
error_logger贮藏啤酒还提供了一个处理程序模块,该模块将传统的erlang错误消息转换为更友好的格式,并将其发送到贮藏啤酒中,以像常规贮藏啤酒日志调用一样对待。 error_logger贮藏啤酒还提供了一个处理程序模块,该模块将传统的erlang错误消息转换为更友好的格式,并将其发送到贮藏啤酒中,以像常规贮藏啤酒日志调用一样对待。
要禁用此功能,请将更大的应用程序变量设置error_logger_redirect为false。您也可以通过设置变量OTP和牛仔消息禁用重新格式化 errLoggerFormatRaw 为 true。
要禁用此功能,请将更大的应用程序变量设置error_logger_redirect为false。您也可以通过设置变量OTP和牛仔消息禁用重新格式化 errLoggerFmtRaw 为 true。
如果您将自己的处理程序安装到中error_logger,则可以通过使用error_logger_whitelist环境变量和允许的处理程序列表来告诉lager使其不被处理。 如果您将自己的处理程序安装到中error_logger,则可以通过使用error_logger_whitelist环境变量和允许的处理程序列表来告诉lager使其不被处理。

+ 1
- 1
eLog.sample.config View File

@ -84,7 +84,7 @@
%% errLogger group leader策略 handle | ignore | mirror %% errLogger group leader策略 handle | ignore | mirror
{errLoggerGLS, handle}, {errLoggerGLS, handle},
%%是否禁止 disable reformatting for OTP and Cowboy messages %%是否禁止 disable reformatting for OTP and Cowboy messages
{errLoggerFormatRaw, false},
{errLoggerFmtRaw, false},
%% 超过高水位标记时,可以将啤酒配置为刷新消息队列中的所有事件通知 %% 超过高水位标记时,可以将啤酒配置为刷新消息队列中的所有事件通知
{errLoggerFlushQueue, true}, {errLoggerFlushQueue, true},
%% 如果flush_queue为true,则可以设置消息队列长度阈值,在该阈值处将开始丢弃消息。默认阈值为0,这意味着如果flush_queue为true, %% 如果flush_queue为true,则可以设置消息队列长度阈值,在该阈值处将开始丢弃消息。默认阈值为0,这意味着如果flush_queue为true,

+ 4
- 4
include/lgDef.hrl View File

@ -39,7 +39,7 @@
{date, string()} | {date, string()} |
{count, non_neg_integer()} | {count, non_neg_integer()} |
{rotator, atom()} | {rotator, atom()} |
{hWM, non_neg_integer()} |
{hwm, non_neg_integer()} |
%% 使 %% 使
{flushQueue, boolean()} | {flushQueue, boolean()} |
%% flush_queue为true0 %% flush_queue为true0
@ -62,7 +62,7 @@
-define(LgDefSyncInt, 1000). %% -define(LgDefSyncInt, 1000). %%
-define(LgDefSyncSize, 1024 * 64). %% 64kb -define(LgDefSyncSize, 1024 * 64). %% 64kb
-define(LgDefCheckInt, 1000). %% -define(LgDefCheckInt, 1000). %%
-define(LgDefCheckHWM, undefined).
-define(LgDefCheckHwm, undefined).
-define(LgDefFlushQueue, false). -define(LgDefFlushQueue, false).
-define(LgDefFlushThr, 10). -define(LgDefFlushThr, 10).
-define(LgDefFmtTer, lgFmtTer). -define(LgDefFmtTer, lgFmtTer).
@ -92,8 +92,8 @@
, flushThr = 0 :: integer() , flushThr = 0 :: integer()
%% timer %% timer
, timer = make_ref() :: reference() , timer = make_ref() :: reference()
%% optional filter fun to avoid counting suppressed messages against HWM totals
%% HWM总数计算抑制消息
%% optional filter fun to avoid counting suppressed messages against Hwm totals
%% Hwm总数计算抑制消息
, filter = fun(_) -> false end :: fun() , filter = fun(_) -> false end :: fun()
}). }).

+ 1
- 1
src/backend/lgBkdConsole.erl View File

@ -107,7 +107,7 @@ handleInfo(_Msg, _State) ->
terminate(removeEpm, State) -> terminate(removeEpm, State) ->
%% have to do this asynchronously because we're in the event handlr %% have to do this asynchronously because we're in the event handlr
spawn(fun() -> eLog:clear_trace_by_destination(State#state.id) end),
spawn(fun() -> eLog:clearTraceByDestination(State#state.id) end),
ok; ok;
terminate(_Reason, _State) -> terminate(_Reason, _State) ->
ok. ok.

+ 9
- 17
src/backend/lgBkdFile.erl View File

@ -59,7 +59,7 @@ init(Opts) ->
Size = lgUtil:get_opt(size, Opts, ?LgDefRotateSize), Size = lgUtil:get_opt(size, Opts, ?LgDefRotateSize),
Count = lgUtil:get_opt(count, Opts, ?LgDefRotateCnt), Count = lgUtil:get_opt(count, Opts, ?LgDefRotateCnt),
Rotator = lgUtil:get_opt(rotator, Opts, ?LgDefRotateMod), Rotator = lgUtil:get_opt(rotator, Opts, ?LgDefRotateMod),
HWM = lgUtil:get_opt(hWM, Opts, ?LgDefCheckHWM),
Hwm = lgUtil:get_opt(hwm, Opts, ?LgDefCheckHwm),
FlushQueue = lgUtil:get_opt(flushQueue, Opts, ?LgDefFlushQueue), FlushQueue = lgUtil:get_opt(flushQueue, Opts, ?LgDefFlushQueue),
FlushThr = lgUtil:get_opt(flushThr, Opts, ?LgDefFlushThr), FlushThr = lgUtil:get_opt(flushThr, Opts, ?LgDefFlushThr),
SyncInt = lgUtil:get_opt(syncInt, Opts, ?LgDefSyncInt), SyncInt = lgUtil:get_opt(syncInt, Opts, ?LgDefSyncInt),
@ -75,18 +75,10 @@ init(Opts) ->
CheckInt = ?IIF(CfgCheckInt == always, 0, CfgCheckInt), CheckInt = ?IIF(CfgCheckInt == always, 0, CfgCheckInt),
{ok, Date} = lgUtil:parseRotateSpec(CfgDate), {ok, Date} = lgUtil:parseRotateSpec(CfgDate),
FileName = lgUtil:parsePath(RelName), FileName = lgUtil:parsePath(RelName),
FmtCfg =
case CfgFmtCfg of
[] ->
MdWhitelist = lgUtil:get_env(mdWhitelist, []),
lgFmtTer:fmtCfg(MdWhitelist);
_ ->
CfgFmtCfg
end,
scheduleRotation(Date, FileName), scheduleRotation(Date, FileName),
Shaper = #lgShaper{hwm = HWM, flushQueue = FlushQueue, flushThr = FlushThr, id = FileName},
FmtCfg = ?IIF(CfgFmtCfg =/= [], CfgFmtCfg, begin MdWhitelist = lgUtil:get_env(mdWhitelist, []), lgFmtTer:fmtCfg(MdWhitelist) end),
Shaper = #lgShaper{hwm = Hwm, flushQueue = FlushQueue, flushThr = FlushThr, id = FileName},
TemState = #state{ TemState = #state{
fileName = FileName, level = Level, size = Size, date = Date fileName = FileName, level = Level, size = Size, date = Date
, count = Count, rotator = Rotator, shaper = Shaper , count = Count, rotator = Rotator, shaper = Shaper
@ -114,13 +106,13 @@ handleCall({mSetLogLevel, Level}, #state{fileName = FileName} = State) ->
end; end;
handleCall({mSetLogHwm, Hwm}, #state{shaper = Shaper, fileName = FileName} = State) -> handleCall({mSetLogHwm, Hwm}, #state{shaper = Shaper, fileName = FileName} = State) ->
case checkOpts([{hWM, Hwm}], true) of
case checkOpts([{hwm, Hwm}], true) of
false -> false ->
{reply, {error, bad_log_hwm}, State};
{reply, {error, badHwm}, State};
_ -> _ ->
NewShaper = Shaper#lgShaper{hwm = Hwm}, NewShaper = Shaper#lgShaper{hwm = Hwm},
?INT_LOG(notice, "Changed loghwm of ~ts to ~p", [FileName, Hwm]), ?INT_LOG(notice, "Changed loghwm of ~ts to ~p", [FileName, Hwm]),
{reply, {last_loghwm, Shaper#lgShaper.hwm}, State#state{shaper = NewShaper}}
{reply, {lastHwm, Shaper#lgShaper.hwm}, State#state{shaper = NewShaper}}
end; end;
handleCall(mRotate, State = #state{fileName = File}) -> handleCall(mRotate, State = #state{fileName = File}) ->
{ok, NewState} = handleInfo({mRotate, File}, State), {ok, NewState} = handleInfo({mRotate, File}, State),
@ -175,7 +167,7 @@ handleInfo({mShaperExpired, Name}, #state{shaper = Shaper, fileName = Name, fmtT
ReportMsg = #lgMsg{severity = ?warning, pid = self(), node = node(), module = ?MODULE, function = ?FUNCTION_NAME, line = ?LINE, metadata = [], datetime = NowStr, timestamp = NowMs, message = ReportStr, destinations = []}, ReportMsg = #lgMsg{severity = ?warning, pid = self(), node = node(), module = ?MODULE, function = ?FUNCTION_NAME, line = ?LINE, metadata = [], datetime = NowStr, timestamp = NowMs, message = ReportStr, destinations = []},
writeLog(State, NowMs, ?warning, FmtTer:format(ReportMsg, FmtCfg)) writeLog(State, NowMs, ?warning, FmtTer:format(ReportMsg, FmtCfg))
end, end,
{ok, State#state{shaper = Shaper#lgShaper{dropped = 0, mps = 0, lastTime = lgTime:now()}}};
{ok, State#state{shaper = Shaper#lgShaper{dropped = 0}}};
handleInfo(_Msg, _State) -> handleInfo(_Msg, _State) ->
?ERR("~p info receive unexpect msg ~p ~n ", [?MODULE, _Msg]), ?ERR("~p info receive unexpect msg ~p ~n ", [?MODULE, _Msg]),
kpS. kpS.
@ -274,7 +266,7 @@ checkOpts([{count, Count} | Tail], IsFile) when is_integer(Count), Count >= 0 ->
checkOpts(Tail, IsFile); checkOpts(Tail, IsFile);
checkOpts([{rotator, Rotator} | Tail], IsFile) when is_atom(Rotator) -> checkOpts([{rotator, Rotator} | Tail], IsFile) when is_atom(Rotator) ->
checkOpts(Tail, IsFile); checkOpts(Tail, IsFile);
checkOpts([{hWM, HighWaterMark} | Tail], IsFile) when is_integer(HighWaterMark), HighWaterMark >= 0 ->
checkOpts([{hwm, HighWaterMark} | Tail], IsFile) when is_integer(HighWaterMark), HighWaterMark >= 0 ->
checkOpts(Tail, IsFile); checkOpts(Tail, IsFile);
checkOpts([{date, _Date} | Tail], IsFile) -> checkOpts([{date, _Date} | Tail], IsFile) ->
checkOpts(Tail, IsFile); checkOpts(Tail, IsFile);

+ 7
- 6
src/crashLog/lgCrashLog.erl View File

@ -133,16 +133,17 @@ saslLimitedStr(supervisor_report, Report, FmtMaxBytes) ->
Context = lgUtil:sup_get(errorContext, Report), Context = lgUtil:sup_get(errorContext, Report),
Reason = lgUtil:sup_get(reason, Report), Reason = lgUtil:sup_get(reason, Report),
Offender = lgUtil:sup_get(offender, Report), Offender = lgUtil:sup_get(offender, Report),
FmtString = <<" Supervisor: ~p~n Context: ~p~n Reason: "
"~s~n Offender: ~s~n~n">>,
FmtString = <<" Supervisor: ~p~n Context: ~p~n Reason: ~s~n Offender: ~s~n~n">>,
ReasonStr = eFmt:formatBin(<<"~p">>, [Reason], [{charsLimit, FmtMaxBytes}]), ReasonStr = eFmt:formatBin(<<"~p">>, [Reason], [{charsLimit, FmtMaxBytes}]),
OffenderStr = eFmt:formatBin(<<"~p">>, [Offender], [{charsLimit, FmtMaxBytes}]), OffenderStr = eFmt:formatBin(<<"~p">>, [Offender], [{charsLimit, FmtMaxBytes}]),
eFmt:format(FmtString, [Name, Context, ReasonStr, OffenderStr]); eFmt:format(FmtString, [Name, Context, ReasonStr, OffenderStr]);
saslLimitedStr(progress, Report, FmtMaxBytes) -> saslLimitedStr(progress, Report, FmtMaxBytes) ->
[begin
BinStr = eFmt:formatBin(<<"~p">>, [Data], [{charsLimit, FmtMaxBytes}]),
eFmt:formatBin(" ~16w: ~s~n", [Tag, BinStr])
end || {Tag, Data} <- Report];
[
begin
BinStr = eFmt:formatBin(<<"~p">>, [Data], [{charsLimit, FmtMaxBytes}]),
eFmt:formatBin(" ~16w: ~s~n", [Tag, BinStr])
end || {Tag, Data} <- Report
];
saslLimitedStr(crash_report, Report, FmtMaxBytes) -> saslLimitedStr(crash_report, Report, FmtMaxBytes) ->
eFmt:formatBin("~p~n", [Report], [{charsLimit, FmtMaxBytes}]). eFmt:formatBin("~p~n", [Report], [{charsLimit, FmtMaxBytes}]).

+ 29
- 28
src/eLog.erl View File

@ -51,9 +51,9 @@
, remove_trace/1 , remove_trace/1
, trace_state/3 , trace_state/3
, trace_func/3 , trace_func/3
, list_all_sinks/0
, clear_all_traces/0
, clear_trace_by_destination/1
, listAllSinks/0
, clearAllTraces/0
, clearTraceByDestination/1
, stop_trace/1 , stop_trace/1
, stop_trace/3 , stop_trace/3
, status/0 , status/0
@ -321,7 +321,7 @@ trace_console(Filter, Level) ->
stop_trace(Backend, Filter, Level) -> stop_trace(Backend, Filter, Level) ->
case validateTraceFilters(Filter, Level, Backend) of case validateTraceFilters(Filter, Level, Backend) of
{Sink, {ok, Trace}} -> {Sink, {ok, Trace}} ->
stop_trace_int(Trace, Sink);
stopTraceInt(Trace, Sink);
{_Sink, Error} -> {_Sink, Error} ->
Error Error
end. end.
@ -349,7 +349,7 @@ validateTraceFilters(Filters, Level, Backend) ->
%% %%
%% and when they come back from validation, they're %% and when they come back from validation, they're
%% `{Filter, Level, Backend}' %% `{Filter, Level, Backend}'
stop_trace_int({_Filter, _Level, Backend} = Trace, Sink) ->
stopTraceInt({_Filter, _Level, Backend} = Trace, Sink) ->
Traces = lgConfig:ptGet({Sink, trace}, []), Traces = lgConfig:ptGet({Sink, trace}, []),
NewTraces = lists:delete(Trace, Traces), NewTraces = lists:delete(Trace, Traces),
_ = lgUtil:trace_filter([element(1, T) || T <- NewTraces]), _ = lgUtil:trace_filter([element(1, T) || T <- NewTraces]),
@ -388,15 +388,16 @@ install_trace(Pid, Level, Options) ->
remove_trace(Pid) -> remove_trace(Pid) ->
sys:remove(Pid, fun ?MODULE:trace_func/3). sys:remove(Pid, fun ?MODULE:trace_func/3).
list_all_sinks() ->
listAllSinks() ->
sets:to_list( sets:to_list(
lists:foldl(fun({_Watcher, _Handler, Sink}, Set) ->
sets:add_element(Sink, Set)
end,
sets:new(),
lgConfig:ptGet(handlers, []))).
clear_traces_by_sink(Sinks) ->
lists:foldl(
fun({_Watcher, _Handler, Sink}, Set) ->
sets:add_element(Sink, Set)
end, sets:new(), lgConfig:ptGet(handlers, [])
)
).
clearTracesBySink(Sinks) ->
lists:foreach( lists:foreach(
fun(S) -> fun(S) ->
lgConfig:ptSet({S, trace}, []), lgConfig:ptSet({S, trace}, []),
@ -405,15 +406,15 @@ clear_traces_by_sink(Sinks) ->
Sinks). Sinks).
clear_trace_by_destination(ID) ->
Sinks = lists:sort(list_all_sinks()),
Traces = find_traces(Sinks),
[stop_trace_int({Filter, Level, Destination}, Sink) || {Sink, {Filter, Level, Destination}} <- Traces, Destination == ID].
clearTraceByDestination(ID) ->
Sinks = lists:sort(listAllSinks()),
Traces = findTraces(Sinks),
[stopTraceInt({Filter, Level, Destination}, Sink) || {Sink, {Filter, Level, Destination}} <- Traces, Destination == ID].
clear_all_traces() ->
clearAllTraces() ->
Handlers = lgConfig:ptGet(handlers, []), Handlers = lgConfig:ptGet(handlers, []),
clear_traces_by_sink(list_all_sinks()),
clearTracesBySink(listAllSinks()),
_ = lgUtil:trace_filter(none), _ = lgUtil:trace_filter(none),
lgConfig:ptSet(handlers, lgConfig:ptSet(handlers,
lists:filter( lists:filter(
@ -427,18 +428,18 @@ clear_all_traces() ->
end end
end, Handlers)). end, Handlers)).
find_traces(Sinks) ->
lists:foldl(fun(S, Acc) ->
Traces = lgConfig:ptGet({S, trace}, []),
Acc ++ lists:map(fun(T) -> {S, T} end, Traces)
end,
[],
Sinks).
findTraces(Sinks) ->
lists:foldl(
fun(S, Acc) ->
Traces = lgConfig:ptGet({S, trace}, []),
class="nv">Acc class="o">++ class="nn">lists:map(fun(T) -> {S, T} end, Traces)
end,
[], Sinks).
status() -> status() ->
Handlers = lgConfig:ptGet(handlers, []), Handlers = lgConfig:ptGet(handlers, []),
Sinks = lists:sort(list_all_sinks()),
Traces = find_traces(Sinks),
Sinks = lists:sort(listAllSinks()),
Traces = findTraces(Sinks),
TraceCount = case length(Traces) of TraceCount = case length(Traces) of
0 -> 1; 0 -> 1;
N -> N N -> N

+ 6
- 6
src/eLog_app.erl View File

@ -96,12 +96,12 @@ tryStartAsyncMgr(Threshold, Window, Sink) ->
ok. ok.
tryInstallKiller(undefined, _ReTime, _Sink) -> ok; tryInstallKiller(undefined, _ReTime, _Sink) -> ok;
tryInstallKiller(HWM, ReTime, Sink) ->
tryInstallKiller(Hwm, ReTime, Sink) ->
case ReTime of case ReTime of
undefined -> undefined ->
_ = supervisor:start_child(lgHWatcherSup, [Sink, lgMgrKiller, [HWM, 5000]]);
_ = supervisor:start_child(lgHWatcherSup, [Sink, lgMgrKiller, [Hwm, 5000]]);
_ -> _ ->
_ = supervisor:start_child(lgHWatcherSup, [Sink, lgMgrKiller, [HWM, ReTime]])
_ = supervisor:start_child(lgHWatcherSup, [Sink, lgMgrKiller, [Hwm, ReTime]])
end, end,
ok. ok.
@ -138,8 +138,8 @@ startHandler(Sink, Module, Config) ->
{Module, Watcher, Sink}. {Module, Watcher, Sink}.
-spec tryStartErrLoggerHandler(boolean(), pos_integer(), list()) -> list(). -spec tryStartErrLoggerHandler(boolean(), pos_integer(), list()) -> list().
tryStartErrLoggerHandler(false, _HWM, _Whitelist) -> [];
tryStartErrLoggerHandler(_ErrLoggerRedirect, HWM, WhiteList) ->
tryStartErrLoggerHandler(false, _Hwm, _Whitelist) -> [];
tryStartErrLoggerHandler(_ErrLoggerRedirect, Hwm, WhiteList) ->
case whereis(error_logger) of case whereis(error_logger) of
undefined -> undefined ->
%% OTP 21error_logger已弃用 'logger' %% OTP 21error_logger已弃用 'logger'
@ -158,7 +158,7 @@ tryStartErrLoggerHandler(_ErrLoggerRedirect, HWM, WhiteList) ->
%% capture which handlers we removed from error_logger so we can restore them when lager stops %% capture which handlers we removed from error_logger so we can restore them when lager stops
%% error_logger中删除的处理程序便lager停止时恢复它们 %% error_logger中删除的处理程序便lager停止时恢复它们
OldHandlers = OldHandlers =
case supervisor:start_child(lgHWatcherSup, [error_logger, lgErrLoggerH, [HWM, lgUtil:get_env(errLoggerGLS, handle)]]) of
case supervisor:start_child(lgHWatcherSup, [error_logger, lgErrLoggerH, [Hwm, lgUtil:get_env(errLoggerGLS, handle)]]) of
{ok, _} -> {ok, _} ->
[begin error_logger:delete_report_handler(X), X end || X <- gen_event:which_handlers(error_logger) -- [lgErrLoggerH | WhiteList]]; [begin error_logger:delete_report_handler(X), X end || X <- gen_event:which_handlers(error_logger) -- [lgErrLoggerH | WhiteList]];
{error, _} -> {error, _} ->

+ 6
- 6
src/errLogger/lgErrLoggerH.erl View File

@ -23,8 +23,8 @@
, handle_call/2 , handle_call/2
, handle_event/2 , handle_event/2
, handle_info/2 , handle_info/2
, terminate/2,
code_change/3
, terminate/2
, code_change/3
]). ]).
-record(state, { -record(state, {
@ -68,7 +68,7 @@ init([HighWaterMark, GlStrategy]) ->
Flush = lgUtil:get_env(errLoggerFlushQueue, true), Flush = lgUtil:get_env(errLoggerFlushQueue, true),
FlushThr = lgUtil:get_env(errLoggerFlushThr, 20), FlushThr = lgUtil:get_env(errLoggerFlushThr, 20),
Shaper = #lgShaper{hwm = HighWaterMark, flushQueue = Flush, flushThr = FlushThr, filter = shaperFun(), id = ?MODULE}, Shaper = #lgShaper{hwm = HighWaterMark, flushQueue = Flush, flushThr = FlushThr, filter = shaperFun(), id = ?MODULE},
Raw = lgUtil:get_env(errLoggerFormatRaw, false),
Raw = lgUtil:get_env(errLoggerFmtRaw, false),
Sink = configSink(), Sink = configSink(),
{ok, #state{sink = Sink, shaper = Shaper, groupleader_strategy = GlStrategy, raw = Raw}}. {ok, #state{sink = Sink, shaper = Shaper, groupleader_strategy = GlStrategy, raw = Raw}}.
@ -130,7 +130,7 @@ handle_info({mShaperExpired, ?MODULE}, #state{sink = Sink, shaper = Shaper} = St
Dropped -> Dropped ->
?LOGFMT(Sink, warning, self(), "lager_error_logger_h dropped ~p messages in the last second that exceeded the limit of ~p messages/sec", [Dropped, Shaper#lgShaper.hwm]) ?LOGFMT(Sink, warning, self(), "lager_error_logger_h dropped ~p messages in the last second that exceeded the limit of ~p messages/sec", [Dropped, Shaper#lgShaper.hwm])
end, end,
{ok, State#state{shaper = Shaper#lgShaper{dropped = 0, mps = 0, lastTime = lgTime:now()}}};
{ok, State#state{shaper = Shaper#lgShaper{dropped = 0}}};
handle_info(_Info, State) -> handle_info(_Info, State) ->
{ok, State}. {ok, State}.
@ -138,7 +138,7 @@ terminate(_Reason, _State) ->
ok. ok.
code_change(_OldVsn, {state, Shaper, GLStrategy}, _Extra) -> code_change(_OldVsn, {state, Shaper, GLStrategy}, _Extra) ->
Raw = lgUtil:get_env(errLoggerFormatRaw, false),
Raw = lgUtil:get_env(errLoggerFmtRaw, false),
{ok, #state{ {ok, #state{
sink = configSink(), sink = configSink(),
shaper = Shaper, shaper = Shaper,
@ -146,7 +146,7 @@ code_change(_OldVsn, {state, Shaper, GLStrategy}, _Extra) ->
raw = Raw raw = Raw
}}; }};
code_change(_OldVsn, {state, Sink, Shaper, GLS}, _Extra) -> code_change(_OldVsn, {state, Sink, Shaper, GLS}, _Extra) ->
Raw = lgUtil:get_env(errLoggerFormatRaw, false),
Raw = lgUtil:get_env(errLoggerFmtRaw, false),
{ok, #state{sink = Sink, shaper = Shaper, groupleader_strategy = GLS, raw = Raw}}; {ok, #state{sink = Sink, shaper = Shaper, groupleader_strategy = GLS, raw = Raw}};
code_change(_OldVsn, State, _Extra) -> code_change(_OldVsn, State, _Extra) ->
{ok, State}. {ok, State}.

+ 9
- 9
src/mgrKiller/lgMgrKiller.erl View File

@ -26,26 +26,26 @@
kill_me() -> kill_me() ->
gen_emm:call(lgEvent, ?MODULE, mKillSelf). gen_emm:call(lgEvent, ?MODULE, mKillSelf).
init([KillerHWM, KillerReinstallAfter]) ->
{ok, #state{killerHwm = KillerHWM, killerReTime = KillerReinstallAfter}}.
init([KillerHwm, KillerReinstallAfter]) ->
{ok, #state{killerHwm = KillerHwm, killerReTime = KillerReinstallAfter}}.
handleCall(mGetLogLevel, State) -> handleCall(mGetLogLevel, State) ->
{replay, ?none, State}; {replay, ?none, State};
handleCall({mSetLogLevel, _Level}, State) -> handleCall({mSetLogLevel, _Level}, State) ->
{replay, ok, State}; {replay, ok, State};
handleCall(mGetSettings, State = #state{killerHwm = KillerHWM, killerReTime = KillerReinstallAfter}) ->
{replay, [KillerHWM, KillerReinstallAfter], State};
handleCall(mKillSelf, #state{killerHwm = KillerHWM, killerReTime = KillerReinstallAfter}) ->
exit({kill_me, [KillerHWM, KillerReinstallAfter]});
handleCall(mGetSettings, State = #state{killerHwm = KillerHwm, killerReTime = KillerReinstallAfter}) ->
{replay, [KillerHwm, KillerReinstallAfter], State};
handleCall(mKillSelf, #state{killerHwm = KillerHwm, killerReTime = KillerReinstallAfter}) ->
exit({kill_me, [KillerHwm, KillerReinstallAfter]});
handleCall(_Request, State) -> handleCall(_Request, State) ->
{replay, ok, State}. {replay, ok, State}.
%% 使 %% 使
handleEvent({mWriteLog, _Message}, State = #state{killerHwm = KillerHWM, killerReTime = KillerReinstallAfter}) ->
handleEvent({mWriteLog, _Message}, State = #state{killerHwm = KillerHwm, killerReTime = KillerReinstallAfter}) ->
{_, Len} = process_info(self(), message_queue_len), {_, Len} = process_info(self(), message_queue_len),
case Len > KillerHWM of
case Len > KillerHwm of
true -> true ->
exit({kill_me, [KillerHWM, KillerReinstallAfter]});
exit({kill_me, [KillerHwm, KillerReinstallAfter]});
_ -> _ ->
{ok, State} {ok, State}
end; end;

+ 4
- 4
src/utils/lgUtil.erl View File

@ -518,7 +518,7 @@ find_file(File1, [{{lgBkdFile, File2}, _Handler, _Sink} = HandlerInfo | Handlers
find_file(File1, [_HandlerInfo | Handlers]) -> find_file(File1, [_HandlerInfo | Handlers]) ->
find_file(File1, Handlers). find_file(File1, Handlers).
%% conditionally check the HWM if the event would not have been filtered
%% conditionally check the Hwm if the event would not have been filtered
checkHwm(Shaper = #lgShaper{filter = Filter}, Event) -> checkHwm(Shaper = #lgShaper{filter = Filter}, Event) ->
case Filter(Event) of case Filter(Event) of
true -> true ->
@ -539,15 +539,15 @@ checkHwm(#lgShaper{id = Id, hwm = Hwm, mps = Mps, lastTime = LastTime, dropped =
{true, 0, Shaper#lgShaper{mps = Mps + 1}}; {true, 0, Shaper#lgShaper{mps = Mps + 1}};
_ -> _ ->
%different second - reset mps %different second - reset mps
{true, 0, Shaper#lgShaper{dropped = 0, mps = 1, lastTime = NowTime}}
{true, 0, Shaper#lgShaper{mps = 1, lastTime = NowTime}}
end; end;
true -> true ->
%% are we still in the same second? %% are we still in the same second?
NowTimeMs = lgTime:nowMs(), NowTimeMs = lgTime:nowMs(),
NowTime = NowTimeMs div 1000, NowTime = NowTimeMs div 1000,
PastMs = NowTimeMs rem 1000,
case LastTime == NowTime of case LastTime == NowTime of
true -> true ->
PastMs = NowTimeMs rem 1000,
%% still in same second, but have exceeded the high water mark %% still in same second, but have exceeded the high water mark
NewDrops = ?IIF(isNeedFlush(FlushQueue, FlushThr), dropMsg(NowTime, Filter, 0), 0), NewDrops = ?IIF(isNeedFlush(FlushQueue, FlushThr), dropMsg(NowTime, Filter, 0), 0),
NewTimer = ?IIF(erlang:read_timer(Timer) =/= false, Timer, erlang:send_after(1000 - PastMs, self(), {mShaperExpired, Id})), NewTimer = ?IIF(erlang:read_timer(Timer) =/= false, Timer, erlang:send_after(1000 - PastMs, self(), {mShaperExpired, Id})),
@ -555,7 +555,7 @@ checkHwm(#lgShaper{id = Id, hwm = Hwm, mps = Mps, lastTime = LastTime, dropped =
_ -> _ ->
_ = erlang:cancel_timer(Shaper#lgShaper.timer), _ = erlang:cancel_timer(Shaper#lgShaper.timer),
%% different second, reset all counters and allow it %% different second, reset all counters and allow it
{drop, Drop, Shaper#lgShaper{dropped = 0, mps = 1, lastTime = NowTime}}
{drop, Drop, Shaper#lgShaper{mps = 1, lastTime = NowTime}}
end end
end. end.

+ 1
- 1
src/watcher/lgHWatcherSrv.erl View File

@ -47,7 +47,7 @@ handleInfo({gen_event_EXIT, Module, normal}, #state{module = Module} = State) ->
{stop, normal, State}; {stop, normal, State};
handleInfo({gen_event_EXIT, Module, shutdown}, #state{module = Module} = State) -> handleInfo({gen_event_EXIT, Module, shutdown}, #state{module = Module} = State) ->
{stop, normal, State}; {stop, normal, State};
handleInfo({gen_event_EXIT, Module, {'EXIT', {kill_me, [_KillerHWM, KillerReinstallAfter]}}}, #state{module = Module, sink = Sink, config = Config} = State) ->
handleInfo({gen_event_EXIT, Module, {'EXIT', {kill_me, [_KillerHwm, KillerReinstallAfter]}}}, #state{module = Module, sink = Sink, config = Config} = State) ->
%% Brutally kill the manager but stay alive to restore settings. %% Brutally kill the manager but stay alive to restore settings.
%% %%
%% SinkPid here means the gen_event process. Handlers *all* live inside the %% SinkPid here means the gen_event process. Handlers *all* live inside the

Loading…
Cancel
Save