diff --git a/eRum.sample.config b/eRum.sample.config index 674c9cd..f7d31a3 100644 --- a/eRum.sample.config +++ b/eRum.sample.config @@ -16,7 +16,7 @@ ]}, %% ******************************************** format相关 ****************************************************** - {metadata_whitelist, []}, + {metadataWhitelist, []}, {reverse_pretty_stacktrace, true}, %%*********************************************** 异步日志相关 ***************************************************** diff --git a/include/eRum.hrl b/include/eRum.hrl index e14b8ba..0adf26a 100644 --- a/include/eRum.hrl +++ b/include/eRum.hrl @@ -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{}. diff --git a/src/crashLog/rumCrashLog.erl b/src/crashLog/rumCrashLog.erl index 05b5377..dfb8271 100644 --- a/src/crashLog/rumCrashLog.erl +++ b/src/crashLog/rumCrashLog.erl @@ -41,7 +41,7 @@ , maxFileSize :: integer() %% 单个日志文件最大字节数 , date :: undefined | string() %% 旋转的时间格式 , count :: integer() %% 要保留的已轮转崩溃日志的数量 - , flap = false :: boolean() %% ???? 这是干啥的呢 + , flap = false :: boolean() %% 日志文件状态是否正确 , rotator :: atom() %% 旋转模块实例 }). diff --git a/src/eRum.erl b/src/eRum.erl index 7f6a7de..0d9b9bb 100644 --- a/src/eRum.erl +++ b/src/eRum.erl @@ -140,7 +140,7 @@ do_log_impl(Severity, Metadata, Format, Args, SeverityAsInt, LevelThreshold, Tra [] -> {[], undefined}; _ -> - {rumUtil:check_traces(Metadata, SeverityAsInt, TraceFilters, []), whereis(?TRACE_SINK)} + {rumUtil:check_traces(Metadata, SeverityAsInt, TraceFilters, []), whereis(?RumTrackSink)} end, case (LevelThreshold band SeverityAsInt) /= 0 orelse Destinations /= [] of true -> @@ -187,7 +187,7 @@ dispatch_log(Severity, Metadata, Format, Args, Size) -> %% @doc Get lager metadata for current process -spec md() -> [{atom(), any()}]. md() -> - case erlang:get(?LAGER_MD_KEY) of + case erlang:get(?PdMdKey) of undefined -> []; MD -> MD end. @@ -202,7 +202,7 @@ md(NewMD) when is_list(NewMD) -> (_) -> false end, NewMD) of true -> - erlang:put(?LAGER_MD_KEY, NewMD), + erlang:put(?PdMdKey, NewMD), ok; false -> erlang:error(badarg) diff --git a/src/errLogger/rumErrLoggerH.erl b/src/errLogger/rumErrLoggerH.erl index 8561e3c..083b8a0 100644 --- a/src/errLogger/rumErrLoggerH.erl +++ b/src/errLogger/rumErrLoggerH.erl @@ -314,7 +314,7 @@ logEvent(Event, #state{sink = Sink, raw = FormatRaw} = State) -> end; {error_report, _GL, {Pid, crash_report, [Self, Neighbours]}} -> ?CRASH_LOG(Event), - {Md, Formatted} = format_crash_report(Self, Neighbours), + {Md, Formatted} = formatCrashReport(Self, Neighbours), ?LOGMSG(Sink, error, [{pid, Pid} | Md], "CRASH REPORT " ++ Formatted); {warning_msg, _GL, {Pid, Fmt, Args}} -> ?LOGFMT(Sink, warning, Pid, Fmt, Args); @@ -374,7 +374,7 @@ logEvent(Event, #state{sink = Sink, raw = FormatRaw} = State) -> {ok, State#state{shaper = Shaper#rumShaper{mps = Shaper#rumShaper.mps - 1}}} end. -format_crash_report(Report, Neighbours) -> +formatCrashReport(Report, Neighbours) -> Name = case get_value(registered_name, Report, []) of [] -> @@ -389,7 +389,7 @@ format_crash_report(Report, Neighbours) -> []; Dict -> %% pull the lager metadata out of the process dictionary, if we can - get_value('_lager_metadata', Dict, []) + get_value(?PdMdKey, Dict, []) end, {Class, Reason, Trace} = get_value(error_info, Report), diff --git a/src/formatter/rumFormatter.erl b/src/formatter/rumFormatter.erl index ad687ac..358f0fd 100644 --- a/src/formatter/rumFormatter.erl +++ b/src/formatter/rumFormatter.erl @@ -6,10 +6,10 @@ -include_lib("eunit/include/eunit.hrl"). -endif. -%% -%% Exported Functions -%% --export([format/2, format/3]). +-export([ + format/2 + , format/3 +]). %% %% API Functions @@ -39,16 +39,19 @@ format(Msg, [], Colors) -> format(Msg, [{eol, "\n"}], Colors); format(Msg, [{eol, EOL}], Colors) -> - Config = case application:get_env(lager, metadata_whitelist) of - undefined -> config(EOL, []); - {ok, Whitelist} -> config(EOL, Whitelist) - end, + Config = + case rumUtil:get_env(metadataWhitelist, undefined) of + undefined -> config(EOL, []); + Whitelist -> config(EOL, Whitelist) + end, format(Msg, Config, Colors); format(Message, Config, Colors) -> - [case V of - color -> output_color(Message, Colors); - _ -> output(V, Message) - end || V <- Config]. + [ + case V of + color -> output_color(Message, Colors); + _ -> output(V, Message) + end || V <- Config + ]. -spec format(rumMsg:rumMsg(), list()) -> any(). format(Msg, Config) -> @@ -170,16 +173,12 @@ make_printable(A, _W) -> make_printable(A). %% persistent term was introduced in OTP 21.2, so %% if we're running on an older OTP, just return the %% default value. --ifdef(OTP_RELEASE). maybe_get_persistent_term(Key, Default) -> try persistent_term:get(Key, Default) catch _:undef -> Default end. --else. -maybe_get_persistent_term(_Key, Default) -> Default. --endif. run_function(Function, Default) -> try Function() of diff --git a/src/transform/rumTransform.erl b/src/transform/rumTransform.erl index 54c3aac..27ec430 100644 --- a/src/transform/rumTransform.erl +++ b/src/transform/rumTransform.erl @@ -66,9 +66,7 @@ walk_body(Acc, []) -> walk_body(Acc, [H | T]) -> walk_body([transform_statement(H, get(sinks)) | Acc], T). -transform_statement({call, Line, {remote, _Line1, {atom, _Line2, Module}, - {atom, _Line3, Function}}, Arguments0} = Stmt, - Sinks) -> +transform_statement({call, Line, {remote, _Line1, {atom, _Line2, Module}, {atom, _Line3, Function}}, Arguments0} = Stmt, Sinks) -> case lists:member(Module, Sinks) of true -> case lists:member(Function, ?RumLevels) of @@ -94,7 +92,6 @@ transform_statement(Stmt, Sinks) when is_list(Stmt) -> transform_statement(Stmt, _Sinks) -> Stmt. - add_function_transforms(_Line, DefaultAttrs, []) -> DefaultAttrs; add_function_transforms(Line, DefaultAttrs, [{Atom, on_emit, {Module, Function}} | Remainder]) -> diff --git a/test/lager_metadata_whitelist_test.erl b/test/lager_metadata_whitelist_test.erl index 0bbf865..24202e5 100644 --- a/test/lager_metadata_whitelist_test.erl +++ b/test/lager_metadata_whitelist_test.erl @@ -15,7 +15,7 @@ setup() -> ok. cleanup(_) -> - ok = application:unset_env(lager, metadata_whitelist), + ok = application:unset_env(lager, metadataWhitelist), catch ets:delete(lager_config), %% kill the ets config table with fire ok = application:stop(lager), ok = application:stop(goldrush),