From e069b103b18f939c98e6c9252e47d90e176d4ec2 Mon Sep 17 00:00:00 2001 From: SisMaker <1713699517@qq.com> Date: Thu, 4 Feb 2021 23:00:36 +0800 Subject: [PATCH] =?UTF-8?q?ft:=E4=BF=AE=E6=94=B9rumUtil.erl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/eRum.hrl | 4 +- src/formatter/rumFormatter.erl | 9 ++- src/misc/rumCrashLog.erl | 5 +- src/misc/rumMsg.erl | 10 ++-- src/misc/rumUtil.erl | 81 ++++++++++---------------- test/lager_metadata_whitelist_test.erl | 47 --------------- 6 files changed, 44 insertions(+), 112 deletions(-) diff --git a/include/eRum.hrl b/include/eRum.hrl index ce543ea..84b0116 100644 --- a/include/eRum.hrl +++ b/include/eRum.hrl @@ -154,8 +154,8 @@ destinations :: list(), metadata :: [tuple()], severity :: rumLevel(), - datetime :: {string(), string()}, - timestamp :: erlang:timestamp(), + datetime :: binary(), + timestamp :: non_neg_integer(), message :: list() }). diff --git a/src/formatter/rumFormatter.erl b/src/formatter/rumFormatter.erl index 2a5df61..b0b2064 100644 --- a/src/formatter/rumFormatter.erl +++ b/src/formatter/rumFormatter.erl @@ -248,13 +248,12 @@ uppercase_severity(alert) -> "ALERT"; uppercase_severity(emergency) -> "EMERGENCY". -ifdef(TEST). -date_time_now() -> - Now = os:timestamp(), - {Date, Time} = rumUtil:format_time(rumUtil:maybe_utc(rumUtil:localtime_ms(Now))), - {Date, Time, Now}. + basic_test_() -> - {Date, Time, Now} = date_time_now(), + Date = {1, 1,1}, + Time = {1, 1,1}, + Now = 11, [{"Default formatting test", ?_assertEqual(iolist_to_binary([Date, " ", Time, " [error] ", pid_to_list(self()), " Message\n"]), iolist_to_binary(format(rumMsg:new("Message", diff --git a/src/misc/rumCrashLog.erl b/src/misc/rumCrashLog.erl index 606615c..dee399c 100644 --- a/src/misc/rumCrashLog.erl +++ b/src/misc/rumCrashLog.erl @@ -191,9 +191,8 @@ do_log({log, Event}, #state{name = Name, fd = FD, inode = Inode, ctime = Ctime, _ = Rotator:rotate_logfile(Name, Count), handle_cast({log, Event}, State); {ok, {NewFD, NewInode, NewCtime, _Size}} -> - {Date, TS} = rumUtil:format_time( - rumStdlib:maybe_utc(erlang:localtime())), - Time = [Date, " ", TS, " =", ReportStr, "====\n"], + TimeBinStr = rumUtil:msToBinStr(), + Time = [TimeBinStr, " =", ReportStr, "====\n"], NodeSuffix = other_node_suffix(Pid), Msg = io_lib:format("~s~s~s", [Time, MsgStr, NodeSuffix]), case file:write(NewFD, unicode:characters_to_binary(Msg)) of diff --git a/src/misc/rumMsg.erl b/src/misc/rumMsg.erl index e489763..8a27cd4 100644 --- a/src/misc/rumMsg.erl +++ b/src/misc/rumMsg.erl @@ -16,15 +16,15 @@ %% create with provided timestamp, handy for testing mostly -spec new(list(), erlang:timestamp(), rumLevel(), [tuple()], list()) -> rumMsg(). -new(Msg, Timestamp, Severity, Metadata, Destinations) -> - {Date, Time} = rumUtil:format_time(rumUtil:maybe_utc(rumUtil:localtime_ms(Timestamp))), - #rumMsg{message = Msg, datetime = {Date, Time}, timestamp = Timestamp, severity = Severity, +new(Msg, MsTick, Severity, Metadata, Destinations) -> + TimeBinStr = rumUtil:msToBinStr(MsTick), + #rumMsg{message = Msg, datetime = TimeBinStr, timestamp = MsTick, severity = Severity, metadata = Metadata, destinations = Destinations}. -spec new(list(), rumLevel(), [tuple()], list()) -> rumMsg(). new(Msg, Severity, Metadata, Destinations) -> - Now = os:timestamp(), - new(Msg, Now, Severity, Metadata, Destinations). + NowMs = rumUtil:nowMs(), + new(Msg, NowMs, Severity, Metadata, Destinations). -spec message(rumMsg()) -> list(). message(Msg) -> diff --git a/src/misc/rumUtil.erl b/src/misc/rumUtil.erl index d44dc28..32e4295 100644 --- a/src/misc/rumUtil.erl +++ b/src/misc/rumUtil.erl @@ -3,8 +3,6 @@ -include("eRum.hrl"). -include_lib("kernel/include/file.hrl"). --compile(export_all). - -export([ levels/0 , levelToNum/1 @@ -13,11 +11,9 @@ , config_to_mask/1 , atomCfgToLevels/1 , maskToLevels/1 - , format_time/0 - , format_time/1 - , localtime_ms/0 - , localtime_ms/1 - , maybe_utc/1 + , nowMs/0 + , msToBinStr/0 + , msToBinStr/1 , parse_rotation_date_spec/1 , calculate_next_rotation/1 , validate_trace/1 @@ -129,10 +125,6 @@ binCfgToLevels(<<">", Rest/binary>>) -> binCfgToLevels(Rest) -> [levelBinToAtom(Rest)]. -binCfgToNum(BinStr) -> - Level = levelBinToAtom(BinStr), - dropInWhile(?RumLevels, Level). - dropInWhile([], _Level) -> []; dropInWhile([CurLevel | Left] = Rest, Level) -> @@ -182,40 +174,34 @@ levelBinToAtom(BinStr) -> erlang:error(badarg) end. -%% returns localtime with milliseconds included -localtime_ms() -> - Now = os:timestamp(), - localtime_ms(Now). +nowMs() -> + erlang:system_time(millisecond). -localtime_ms(Now) -> - {_, _, Micro} = Now, - {Date, {Hours, Minutes, Seconds}} = calendar:now_to_local_time(Now), - {Date, {Hours, Minutes, Seconds, Micro div 1000 rem 1000}}. +msToBinStr() -> + msToBinStr(nowMs()). +msToBinStr(MsTick) -> + ThisSec = MsTick div 1000, + ThisMs = MsTick rem 1000, + {{Y, M, D}, {H, Mi, S}} = erlang:universaltime_to_localtime(erlang:posixtime_to_universaltime(ThisSec)), + <<(integer_to_binary(Y))/binary, "-", (i2b(M))/binary, "-", (i2b(D))/binary, " ", (i2b(H))/binary, ":", (i2b(Mi))/binary, ":", (i2b(S))/binary, ".", (i3b(ThisMs))/binary>>. -maybe_utc({Date, {H, M, S, Ms}}) -> - case rumStdlib:maybe_utc({Date, {H, M, S}}) of - {utc, {Date1, {H1, M1, S1}}} -> - {utc, {Date1, {H1, M1, S1, Ms}}}; - {Date1, {H1, M1, S1}} -> - {Date1, {H1, M1, S1, Ms}} +i2b(Num) -> + if + Num < 10 -> + <<"0", (integer_to_binary(Num))/binary>>; + true -> + integer_to_binary(Num) end. -format_time() -> - format_time(maybe_utc(localtime_ms())). - -format_time({utc, {{Y, M, D}, {H, Mi, S, Ms}}}) -> - {[integer_to_list(Y), $-, i2l(M), $-, i2l(D)], - [i2l(H), $:, i2l(Mi), $:, i2l(S), $., i3l(Ms), $ , $U, $T, $C]}; -format_time({{Y, M, D}, {H, Mi, S, Ms}}) -> - {[integer_to_list(Y), $-, i2l(M), $-, i2l(D)], - [i2l(H), $:, i2l(Mi), $:, i2l(S), $., i3l(Ms)]}; -format_time({utc, {{Y, M, D}, {H, Mi, S}}}) -> - {[integer_to_list(Y), $-, i2l(M), $-, i2l(D)], - [i2l(H), $:, i2l(Mi), $:, i2l(S), $ , $U, $T, $C]}; -format_time({{Y, M, D}, {H, Mi, S}}) -> - {[integer_to_list(Y), $-, i2l(M), $-, i2l(D)], - [i2l(H), $:, i2l(Mi), $:, i2l(S)]}. +i3b(Num) -> + if Num < 10 -> + <<"00", (integer_to_binary(Num))/binary>>; + Num < 100 -> + <<"0", (integer_to_binary(Num))/binary>>; + true -> + integer_to_binary(Num) + end. parse_rotation_hour_spec([], Res) -> {ok, Res}; @@ -491,11 +477,6 @@ is_loggable(Msg, SeverityThreshold, MyName) when is_integer(SeverityThreshold) - rumMsg:severity_as_int(Msg) =< SeverityThreshold orelse lists:member(MyName, rumMsg:destinations(Msg)). -i2l(I) when I < 10 -> [$0, $0 + I]; -i2l(I) -> integer_to_list(I). -i3l(I) when I < 100 -> [$0 | i2l(I)]; -i3l(I) -> integer_to_list(I). - %% When log_root option is provided, get the real path to a file expand_path(RelPath) -> case application:get_env(lager, log_root) of @@ -803,27 +784,27 @@ format_time_test_() -> [ ?_assertEqual("2012-10-04 11:16:23.002", begin - {D, T} = format_time({{2012, 10, 04}, {11, 16, 23, 2}}), + {D, T} = msToBinStr({{2012, 10, 04}, {11, 16, 23, 2}}), lists:flatten([D, $ , T]) end), ?_assertEqual("2012-10-04 11:16:23.999", begin - {D, T} = format_time({{2012, 10, 04}, {11, 16, 23, 999}}), + {D, T} = msToBinStr({{2012, 10, 04}, {11, 16, 23, 999}}), lists:flatten([D, $ , T]) end), ?_assertEqual("2012-10-04 11:16:23", begin - {D, T} = format_time({{2012, 10, 04}, {11, 16, 23}}), + {D, T} = msToBinStr({{2012, 10, 04}, {11, 16, 23}}), lists:flatten([D, $ , T]) end), ?_assertEqual("2012-10-04 00:16:23.092 UTC", begin - {D, T} = format_time({utc, {{2012, 10, 04}, {0, 16, 23, 92}}}), + {D, T} = msToBinStr({utc, {{2012, 10, 04}, {0, 16, 23, 92}}}), lists:flatten([D, $ , T]) end), ?_assertEqual("2012-10-04 11:16:23 UTC", begin - {D, T} = format_time({utc, {{2012, 10, 04}, {11, 16, 23}}}), + {D, T} = msToBinStr({utc, {{2012, 10, 04}, {11, 16, 23}}}), lists:flatten([D, $ , T]) end) ]. diff --git a/test/lager_metadata_whitelist_test.erl b/test/lager_metadata_whitelist_test.erl index 3ca3ff1..657f281 100644 --- a/test/lager_metadata_whitelist_test.erl +++ b/test/lager_metadata_whitelist_test.erl @@ -21,51 +21,4 @@ cleanup(_) -> ok = application:stop(goldrush), ok = error_logger:tty(true). -date_time_now() -> - Now = os:timestamp(), - {Date, Time} = rumUtil:format_time(rumUtil:maybe_utc(rumUtil:localtime_ms(Now))), - {Date, Time, Now}. - -basic_test_() -> - {Date, Time, Now} = date_time_now(), - { - foreach, - fun setup/0, - fun cleanup/1, - [{"Meta", fun() -> - Whitelist = [meta0], - ok = application:set_env(lager, metadata_whitelist, Whitelist), - Msg = rumMsg:new("Message", Now, error, [], []), - Expected = iolist_to_binary([Date, " ", Time, " [error] Message\n"]), - Got = iolist_to_binary(rumFormatter:format(Msg, [])), - ?assertEqual(Expected, Got) - end}, - {"Meta1", fun() -> - Whitelist = [meta1], - ok = application:set_env(lager, metadata_whitelist, Whitelist), - Msg = rumMsg:new("Message", Now, error, [{meta1, "value1"}], []), - Expected = iolist_to_binary([Date, " ", Time, " [error] meta1=value1 Message\n"]), - Got = iolist_to_binary(rumFormatter:format(Msg, [])), - ?assertEqual(Expected, Got) - end}, - {"Meta2", fun() -> - Whitelist = [meta1, meta2], - ok = application:set_env(lager, metadata_whitelist, Whitelist), - Msg = rumMsg:new("Message", Now, error, [{meta1, "value1"}, {meta2, 2}], []), - Expected = iolist_to_binary([Date, " ", Time, " [error] meta1=value1 meta2=2 Message\n"]), - Got = iolist_to_binary(rumFormatter:format(Msg, [])), - ?assertEqual(Expected, Got) - end}, - {"Meta3", fun() -> - Whitelist = [meta1, meta2], - ok = application:set_env(lager, metadata_whitelist, Whitelist), - Msg = rumMsg:new("Message", Now, error, [{meta1, "value1"}, {meta3, 3}], []), - Expected = iolist_to_binary([Date, " ", Time, " [error] meta1=value1 Message\n"]), - Got = iolist_to_binary(rumFormatter:format(Msg, [])), - ?assertEqual(Expected, Got) - end} - ] - }. - - -endif.