diff --git a/eRum.sample.config b/eRum.sample.config index a19d213..2d41749 100644 --- a/eRum.sample.config +++ b/eRum.sample.config @@ -16,11 +16,26 @@ ]}, %%*********************************************** handler与接收器(sink) and traces ****************************** - %% 消息处理模块可以存在多个,[{Name, [Optins]}]=Handler() {lager_file_backend, [{file, "console.log"}, {level, info}]} 消息处理模块可以存在多个 + %% 消息处理模块可以存在多个,[{SinkModule, [rumConsoleOpt() | rumFileOpt()]}]=Handler() 消息处理模块可以存在多个 + %% eg: {handlers, [ + %% {rumBkdFile, [{id, console}, {file, "console.log"}, {level, info}]}, + %% {rumBkdFile, [{id, error}, {file, "error.log"}, {level, error}]}, + %% {rumBkdConsole, [{level, info}]} + %% ]} {handlers, []}, - %% 额外的接收器列表 [{handler, [Handler()]}] + + %% 额外的接收器列表 [{SinkName, [{handlers, Handler()}|{asyncThreshold, 500}|{asyncThrWindow, 50}|{killerHwm, 1000}|{killerReTime, 5000}]}] + %% eg: {extraSinks, [ + %% {auditEvent,[{handlers, [{rumBkdFile, [{file, "audit.log"}, {level, info}]}]}, {asyncThreshold, 500}, {asyncThrWindow, 50}]} + %% ]}} {extraSinks, []}, %% traces列表 [{handler, [Handler()]}] + %%eg: {traces, [ + %% handler, filter, message level (defaults to debug if not given) + %% {rumBkdConsole, [{module, foo}], info}, + %% {{rumBkdFile, "trace.log"}, [{request, '>', 120}], error}, + %% {{rumBkdFile, "event.log"}, [{module, bar}]} %% implied debug level here + %% ]} {traces, []}, %%*********************************************** 异步日志相关 ***************************************************** @@ -37,7 +52,6 @@ %% 参见killer_hwm {killerReTime, 5000}, - %% ******************************************** format相关 ****************************************************** %% 元数据名单列表 {metadataWhitelist, []}, @@ -49,8 +63,7 @@ {logRoot, "./log"}, %% crash log cfg - %% 有效值 string | false - %% 为 false 的时候 没有 crash logger. + %% 有效值 string | false 值为 false 的时候 没有 crash logger. {crashLogFile, "crash.log"}, %%崩溃日志中事件的最大大小(以字节为单位)-默认为65536 {crashLogMsgSize, 65536}, @@ -63,7 +76,6 @@ %% 崩溃日志旋转器模块-默认为lager_rotator_default {crashLogRotator, rumRotatorIns}, - %% ********************************************** error_logger相关 ********************************************** %% 是否将error_logger消息重定向到默认的lager_event接收器-默认为true {errLoggerRedirect, true}, diff --git a/include/rumDef.hrl b/include/rumDef.hrl index d5a7f6f..29c41b7 100644 --- a/include/rumDef.hrl +++ b/include/rumDef.hrl @@ -24,32 +24,33 @@ %% rumBkdConsole的选项 -type rumConsoleOpt() :: -{id, atom() | {atom(), atom()}} | -{use_stderr, boolean()} | -{group_leader, false | pid() | atom()} | -{formatTer, atom()} | -{formatCfg, list()}. + {id, atom() | {atom(), atom()}} | + {use_stderr, boolean()} | + {group_leader, false | pid() | atom()} | + {formatTer, atom()} | + {formatCfg, list()}. %% rumBkdFile的选项 -type rumFileOpt() :: -{file, binary()} | -{level, rumAtomLevel() | atom()} | -{size, non_neg_integer()} | -{date, string()} | -{count, non_neg_integer()} | -{rotator, atom()} | -{hWM, non_neg_integer()} | -%% 对于特定的接收器事件队列刷新,请使用改选项 -{flushQueue, boolean()} | -%% 对于接收器 如果flush_queue为true,则可以设置消息队列长度阈值,在该阈值处将开始丢弃消息。默认阈值为0, -%% 这意味着如果flush_queue为true,则超过高水位标记时将丢弃消息,而不管消息队列的长度如何。: -{flushThr, non_neg_integer()} | -{syncInt, non_neg_integer()} | -{syncSize, non_neg_integer()} | -{syncOn, rumAtomLevel()} | -{checkInt, non_neg_integer()} | -{formatTer, atom()} | -{formatCfg, term()}. + {id, atom()} | + {file, binary()} | + {level, rumAtomLevel() | atom()} | + {size, non_neg_integer()} | + {date, string()} | + {count, non_neg_integer()} | + {rotator, atom()} | + {hWM, non_neg_integer()} | + %% 对于特定的接收器事件队列刷新,请使用改选项 + {flushQueue, boolean()} | + %% 对于接收器 如果flush_queue为true,则可以设置消息队列长度阈值,在该阈值处将开始丢弃消息。默认阈值为0, + %% 这意味着如果flush_queue为true,则超过高水位标记时将丢弃消息,而不管消息队列的长度如何。: + {flushThr, non_neg_integer()} | + {syncInt, non_neg_integer()} | + {syncSize, non_neg_integer()} | + {syncOn, rumAtomLevel()} | + {checkInt, non_neg_integer()} | + {formatTer, atom()} | + {formatCfg, term()}. %% BkdFile选项默认值 -define(RumDefLogLevel, info). @@ -58,12 +59,12 @@ -define(RumDefRotateCnt, 5). -define(RumDefRotateMod, rumRotatorIns). -define(RumDefSyncLevel, error). --define(RumDefSyncInt, 1000). +-define(RumDefSyncInt, 1000). %% 单位毫秒 -define(RumDefSyncSize, 1024 * 64). %% 64kb --define(RumDefCheckInt, 1000). --define(RumDefCheckHWM, 1000). %% IMY-todo修正该默认值 --define(RumDefFlushQueue, true). --define(RumDefFlushThr, 0). %% IMY-todo修正该默认值 +-define(RumDefCheckInt, 1000). %% 单位毫秒 +-define(RumDefCheckHWM, undefined). +-define(RumDefFlushQueue, false). +-define(RumDefFlushThr, 10). -define(RumDefFormatTer, rumFormatTer). -define(RumDefFormatterCfg, []). @@ -71,8 +72,8 @@ -define(RumDefHandler, [ {rumBkdConsole, [{level, info}]}, - {rumBkdFile, [{file, <<"./log/error.log">>}, {level, '>=error'}, {size, 10485760}, {date, "$D0"}, {count, 5}]}, - {rumBkdFile, [{file, <<"./log/console.log">>}, {level, '>=debug'}, {size, 10485760}, {date, "$D0"}, {count, 5}]} + {rumBkdFile, [{id, error}, {file, <<"./log/error.log">>}, {level, '>=error'}, {size, 10485760}, {date, "$D0"}, {count, 5}]}, + {rumBkdFile, [{id, console}, {file, <<"./log/console.log">>}, {level, '>=debug'}, {size, 10485760}, {date, "$D0"}, {count, 5}]} ]). -record(rumShaper, { diff --git a/src/backend/rumBkdFile.erl b/src/backend/rumBkdFile.erl index 49cad95..ec3f066 100644 --- a/src/backend/rumBkdFile.erl +++ b/src/backend/rumBkdFile.erl @@ -60,10 +60,10 @@ init(Opts) -> Count = rumUtil:get_opt(count, Opts, ?RumDefRotateCnt), Rotator = rumUtil:get_opt(rotator, Opts, ?RumDefRotateMod), HWM = rumUtil:get_opt(hWM, Opts, ?RumDefCheckHWM), - Flush = rumUtil:get_opt(flushQueue, Opts, ?RumDefFlushQueue), + FlushQueue = rumUtil:get_opt(flushQueue, Opts, ?RumDefFlushQueue), FlushThr = rumUtil:get_opt(flushThr, Opts, ?RumDefFlushThr), SyncInt = rumUtil:get_opt(syncInt, Opts, ?RumDefSyncInt), - CfgCheckInterval = rumUtil:get_opt(checkInt, Opts, ?RumDefCheckInt), + CfgCheckInt = rumUtil:get_opt(checkInt, Opts, ?RumDefCheckInt), SyncSize = rumUtil:get_opt(syncSize, Opts, ?RumDefSyncSize), CfgSyncOn = rumUtil:get_opt(syncOn, Opts, ?RumDefSyncLevel), FormatTer = rumUtil:get_opt(formatTer, Opts, ?RumDefFormatTer), @@ -72,7 +72,7 @@ init(Opts) -> %% 需要二次转换的配置在这里处理 Level = rumUtil:configToMask(CfgLevel), SyncOn = rumUtil:configToMask(CfgSyncOn), - CheckInt = ?IIF(CfgCheckInterval == always, 0, CfgCheckInterval), + CheckInt = ?IIF(CfgCheckInt == always, 0, CfgCheckInt), {ok, Date} = rumUtil:parseRotateSpec(CfgDate), FileName = rumUtil:parsePath(RelName), @@ -86,7 +86,7 @@ init(Opts) -> end, scheduleRotation(Date, FileName), - Shaper = rumUtil:maybeFlush(Flush, #rumShaper{hwm = HWM, flushThr = FlushThr, id = FileName}), + Shaper = #rumShaper{hwm = HWM, flushQueue = FlushQueue, flushThr = FlushThr, id = FileName}, TemState = #state{ fileName = FileName, level = Level, size = Size, date = Date , count = Count, rotator = Rotator, shaper = Shaper @@ -237,9 +237,9 @@ writeFile(#state{fd = Fd, fileName = FileName, flap = Flap, syncOn = SyncOn} = S State end. -isWriteCheck(Fd, LastCheck, CheckInterval, Name, Inode, CTime, Timestamp) -> +isWriteCheck(Fd, LastCheck, CheckInt, Name, Inode, CTime, Timestamp) -> DiffTime = abs(Timestamp - LastCheck), - case DiffTime >= CheckInterval orelse Fd == undefined of + case DiffTime >= CheckInt orelse Fd == undefined of true -> true; _ -> @@ -250,11 +250,16 @@ isWriteCheck(Fd, LastCheck, CheckInterval, Name, Inode, CTime, Timestamp) -> %% Convert the config into a gen_event handler ID configToId(Config) -> - case rumUtil:get_opt(file, Config, undefined) of + case rumUtil:get_opt(id, Config, undefined) of undefined -> - erlang:error(no_file); - File -> - {?MODULE, File} + case rumUtil:get_opt(file, Config, undefined) of + undefined -> + erlang:error(no_file); + File -> + {?MODULE, File} + end; + Id -> + {?MODULE, Id} end. checkOpts([], IsFile) -> diff --git a/src/utils/rumUtil.erl b/src/utils/rumUtil.erl index 140676b..2fdc578 100644 --- a/src/utils/rumUtil.erl +++ b/src/utils/rumUtil.erl @@ -33,7 +33,6 @@ , checkHwm/1 , checkHwm/2 , makeInnerSinkName/1 - , maybeFlush/2 , isFileChanged/3 , get_env/2 , get_opt/3 @@ -593,11 +592,6 @@ dropMsg(LastTime, Filter, Count) -> makeInnerSinkName(Sink) -> binary_to_atom(<<(atom_to_binary(Sink, utf8))/binary, "Event">>). -maybeFlush(undefined, #rumShaper{} = S) -> - S; -maybeFlush(Flag, #rumShaper{} = S) -> - S#rumShaper{flushQueue = Flag}. - -spec isFileChanged(FileName :: file:name_all(), Inode :: pos_integer(), Ctime :: file:date_time()) -> {boolean(), file:file_info() | undefined}. isFileChanged(FileName, Inode, Ctime) -> case file:read_file_info(FileName, [raw]) of diff --git a/进度.md b/进度.md index f9af437..4063bce 100644 --- a/进度.md +++ b/进度.md @@ -21,10 +21,7 @@ # TODO - rumBkdFile 默认值修改 - eRum.sameple.config 默认值修改 io_lib:format 替换为 eFmt:formatBin - 各个模块审查一下 reamde.me 整理 trace代码整理 eRumCfg相关代码添加