|
|
@ -1,3 +1,6 @@ |
|
|
|
%% 应用名字 |
|
|
|
-define(RumAppName, eRum). |
|
|
|
|
|
|
|
%% 三元表达式 |
|
|
|
-define(IIF(Cond, Ret1, Ret2), (case Cond of true -> Ret1; _ -> Ret2 end)). |
|
|
|
|
|
|
@ -7,12 +10,12 @@ |
|
|
|
|
|
|
|
-define(Print(Args), io:format("IMY************~p~n", [Args])). |
|
|
|
|
|
|
|
-define(LAGER_MD_KEY, '__lager_metadata'). |
|
|
|
-define(TRACE_SINK, '__trace_sink'). |
|
|
|
-define(ROTATE_TIMEOUT, 100000). |
|
|
|
%% 额外进程字典key |
|
|
|
-define(PdMdKey, pdRumMd). |
|
|
|
-define(RumTrackSink, '__trace_sink'). |
|
|
|
|
|
|
|
%% 应用名字 |
|
|
|
-define(RumAppName, eRum). |
|
|
|
%% 旋转日志超时时间 |
|
|
|
-define(ROTATE_TIMEOUT, 100000). |
|
|
|
|
|
|
|
%% 部分默认配置值 |
|
|
|
-define(RumDefTruncation, 4096). |
|
|
@ -20,6 +23,7 @@ |
|
|
|
-define(RumDefSink, rumEvent). |
|
|
|
-define(RumErrLogSink, error_logger_lager_event). |
|
|
|
|
|
|
|
%% rumBkdConsole的选项 |
|
|
|
-type rumConsoleOpt() :: |
|
|
|
{id, atom() | {atom(), atom()}} | |
|
|
|
{use_stderr, boolean()} | |
|
|
@ -27,9 +31,10 @@ |
|
|
|
{formatter, atom()} | |
|
|
|
{formatter_config, list()}. |
|
|
|
|
|
|
|
%% rumBkdFile的选项 |
|
|
|
-type rumFileOpt() :: |
|
|
|
{file, string()} | |
|
|
|
{level, rumAtomLevel()} | |
|
|
|
{file, binary()} | |
|
|
|
{level, rumAtomLevel() | atom()} | |
|
|
|
{size, non_neg_integer()} | |
|
|
|
{date, string()} | |
|
|
|
{count, non_neg_integer()} | |
|
|
@ -44,7 +49,7 @@ |
|
|
|
{formatter, atom()} | |
|
|
|
{formatter_config, term()}. |
|
|
|
|
|
|
|
%% BkdFile默认配置 |
|
|
|
%% BkdFile选项默认值 |
|
|
|
-define(RumDefLogLevel, info). |
|
|
|
-define(RumDefRotateSize, 10485760). %% 10mb |
|
|
|
-define(RumDefRotateDate, "$D0"). %% midnight |
|
|
@ -60,8 +65,6 @@ |
|
|
|
-define(RumDefFormatter, rumFormatter). |
|
|
|
-define(RumDefFormatterCfg, []). |
|
|
|
|
|
|
|
%% 进程字典Key |
|
|
|
|
|
|
|
%% 默认日志文件选项 |
|
|
|
-define(RumDefHandler, |
|
|
|
[ |
|
|
@ -82,6 +85,38 @@ |
|
|
|
{line, ?LINE} | Extras |
|
|
|
]). |
|
|
|
|
|
|
|
-record(rumShaper, { |
|
|
|
id :: any() |
|
|
|
%% 每秒我们尝试传递多少消息 |
|
|
|
, hwm = undefined :: 'undefined' | pos_integer() |
|
|
|
%% 这秒内我们收到了多少条消息 |
|
|
|
, mps = 0 :: non_neg_integer() |
|
|
|
%% 当前秒 |
|
|
|
, lastTime = rumTime:now() :: erlang:timestamp() |
|
|
|
%% 此秒内丢弃的消息数 |
|
|
|
, dropped = 0 :: non_neg_integer() |
|
|
|
%% If true, flush notify messages from msg queue at overload |
|
|
|
%% 如果为true,则在过载时刷新来自消息队列的通知消息 |
|
|
|
, flushQueue = true :: boolean() |
|
|
|
, flushThreshold = 0 :: integer() |
|
|
|
%% timer |
|
|
|
, timer = make_ref() :: reference() |
|
|
|
%% optional filter fun to avoid counting suppressed messages against HWM totals |
|
|
|
%% 可选的过滤器函数,以避免对HWM总数计算抑制消息 |
|
|
|
, filter = fun(_) -> false end :: fun() |
|
|
|
}). |
|
|
|
|
|
|
|
-record(rumMsg, { |
|
|
|
destinations :: list(), |
|
|
|
metadata :: [tuple()], |
|
|
|
severity :: rumAtomLevel(), |
|
|
|
datetime :: binary(), |
|
|
|
timestamp :: non_neg_integer(), |
|
|
|
message :: list() |
|
|
|
}). |
|
|
|
|
|
|
|
-type rumShaper() :: #rumShaper{}. |
|
|
|
|
|
|
|
-type rumAtomLevel() :: none | debug | info | notice | warning | error | critical | alert | emergency. |
|
|
|
-type rumMaskLevel() :: 0..256. |
|
|
|
|
|
|
@ -122,8 +157,7 @@ |
|
|
|
-else. |
|
|
|
-define(INT_LOG(Level, Format, Args), |
|
|
|
Self = self(), |
|
|
|
%% do this in a spawn so we don't cause a deadlock calling gen_event:which_handlers |
|
|
|
%% from a gen_event handler |
|
|
|
%%在生成中执行此操作,这样就不会导致从gen_event处理程序调用gen_event:which_handlers的死锁 |
|
|
|
spawn(fun() -> |
|
|
|
case catch (gen_event:which_handlers(rumEvent)) of |
|
|
|
X when X == []; X == {'EXIT', noproc}; X == [rumBkdThrottle] -> |
|
|
@ -178,34 +212,3 @@ |
|
|
|
-define(rumNone(Format, Args), ?rumLog(none, Format, Args, safe)). |
|
|
|
-define(rumNone(Metadata, Format, Args), ?rumLog(none, Metadata, Format, Args, safe)). |
|
|
|
|
|
|
|
-record(rumShaper, { |
|
|
|
id :: any() |
|
|
|
%% 每秒我们尝试传递多少消息 |
|
|
|
, hwm = undefined :: 'undefined' | pos_integer() |
|
|
|
%% 这秒内我们收到了多少条消息 |
|
|
|
, mps = 0 :: non_neg_integer() |
|
|
|
%% 当前秒 |
|
|
|
, lastTime = rumTime:now() :: erlang:timestamp() |
|
|
|
%% 此秒内丢弃的消息数 |
|
|
|
, dropped = 0 :: non_neg_integer() |
|
|
|
%% If true, flush notify messages from msg queue at overload |
|
|
|
%% 如果为true,则在过载时刷新来自消息队列的通知消息 |
|
|
|
, flushQueue = true :: boolean() |
|
|
|
, flushThreshold = 0 :: integer() |
|
|
|
%% timer |
|
|
|
, timer = make_ref() :: reference() |
|
|
|
%% optional filter fun to avoid counting suppressed messages against HWM totals |
|
|
|
%% 可选的过滤器函数,以避免对HWM总数计算抑制消息 |
|
|
|
, filter = fun(_) -> false end :: fun() |
|
|
|
}). |
|
|
|
|
|
|
|
-record(rumMsg, { |
|
|
|
destinations :: list(), |
|
|
|
metadata :: [tuple()], |
|
|
|
severity :: rumAtomLevel(), |
|
|
|
datetime :: binary(), |
|
|
|
timestamp :: non_neg_integer(), |
|
|
|
message :: list() |
|
|
|
}). |
|
|
|
|
|
|
|
-type rumShaper() :: #rumShaper{}. |