diff --git a/include/eLog.hrl b/include/eLog.hrl index 79baaad..e1184c3 100644 --- a/include/eLog.hrl +++ b/include/eLog.hrl @@ -9,8 +9,9 @@ case ets:info(?eLogEts) of undefined -> ets:new(?eLogEts, [named_table, public]), - ets:insert(?eLogEts, {Sink, ?llvNone}), - lgKvsToBeam:load(?eLogCfg, [{Sink, ?llvNone}]); + NodeName = atom_to_binary(node(), utf8), + ets:insert(?eLogEts, [{Sink, ?llvNone}, {?eLogNodeName, NodeName}]), + lgKvsToBeam:load(?eLogCfg, [{Sink, ?llvNone}, {?eLogNodeName, NodeName}]); _ -> ignore end). @@ -19,13 +20,13 @@ %% Level, Pid, Node, Module, Function, Line, Other -define(lgLog(Severity, Format, Args, Safety), - ?lgLog(?LgDefSink, Severity, self(), node(), ?MODULE, ?FUNCTION_NAME, ?LINE, eLog:getMd(), Format, Args, ?LgDefTruncation, Safety)). + ?lgLog(?LgDefSink, Severity, self(), ?MODULE, ?FUNCTION_NAME, ?LINE, eLog:getMd(), Format, Args, ?LgDefTruncation, Safety)). -define(lgLog(Severity, Metadata, Format, Args, Safety), - ?lgLog(?LgDefSink, Severity, self(), node(), ?MODULE, ?FUNCTION_NAME, ?LINE, ?lgCASE(eLog:getMdPd(), undefined, Metadata, Md, Metadata ++ Md), Format, Args, ?LgDefTruncation, Safety)). + ?lgLog(?LgDefSink, Severity, self(), ?MODULE, ?FUNCTION_NAME, ?LINE, ?lgCASE(eLog:getMdPd(), undefined, Metadata, Md, Metadata ++ Md), Format, Args, ?LgDefTruncation, Safety)). --define(lgLog(Sink, Severity, Pid, Node, Module, Function, Line, Metadata, Format, Args, Size, Safety), - (?eLogCfg:get(Sink) band Severity == Severity andalso eLog:doLogImpl(Severity, Pid, Node, Module, Function, Line, Metadata, Format, Args, Size, Sink, Safety))). +-define(lgLog(Sink, Severity, Pid, Module, Function, Line, Metadata, Format, Args, Size, Safety), + (?eLogCfg:get(Sink) band Severity == Severity andalso eLog:doLogImpl(Severity, Pid, Module, Function, Line, Metadata, Format, Args, Size, Sink, Safety))). -define(lgNone(Format), ?lgLog(?llvNone, Format, undefined, safe)). -define(lgNone(Format, Args), ?lgLog(?llvNone, Format, Args, safe)). diff --git a/include/lgCom.hrl b/include/lgCom.hrl index aa66f0d..3ad0b28 100644 --- a/include/lgCom.hrl +++ b/include/lgCom.hrl @@ -13,6 +13,9 @@ -define(eLogEts, eLogEts). -define(eLogPtTl, eLogPtTl). +%% 当前节点名 +-define(eLogNodeName, eLogNodeName). + -define(LgDefSink, eLogEvent). -define(LgDefTruncation, 4096). diff --git a/include/lgDef.hrl b/include/lgDef.hrl index 7ca9cdd..06266b6 100644 --- a/include/lgDef.hrl +++ b/include/lgDef.hrl @@ -98,7 +98,6 @@ -record(lgMsg, { severity :: lgNumLevel() , pid :: pid() - , node :: node() , module :: module() , function :: atom() , line :: integer() @@ -123,7 +122,7 @@ -define(LgShouldLog(Level), ?eLogCfg:get(?LgDefSink) band Level =/= 0). -define(LgNotify(Level, Pid, Format, Args), - gen_emm:info_notify(?LgDefSink, {mWriteLog, #lgMsg{severity = Level, pid = Pid, node = node(), module = ?MODULE, function = ?FUNCTION_NAME, line = ?LINE, metadata = [], timestamp = lgTime:nowMs(), message = eFmt:format(Format, Args), destinations = []}})). + gen_emm:info_notify(?LgDefSink, {mWriteLog, #lgMsg{severity = Level, pid = Pid, module = ?MODULE, function = ?FUNCTION_NAME, line = ?LINE, metadata = [], timestamp = lgTime:nowMs(), message = eFmt:format(Format, Args), destinations = []}})). %%仅供内部使用仅内部非阻塞日志记录调用,当我们仍在启动大型啤酒时尝试进行日志记录(通常为错误)时,会有一些特殊处理。 -define(INT_LOG(Level, Format, Args), diff --git a/src/backend/lgBkdFile.erl b/src/backend/lgBkdFile.erl index 88abd13..6c6d0f8 100644 --- a/src/backend/lgBkdFile.erl +++ b/src/backend/lgBkdFile.erl @@ -138,7 +138,7 @@ handleEvent({mWriteLog, Message}, #state{fBName = _FBName, level = Level, shaper _ -> ReportStr = eFmt:format(<<"lgBkdFile dropped ~p messages in the last second that exceeded the limit of ~p messages/sec">>, [Drop, NewShaper#lgShaper.hwm]), NowMs = lgTime:nowMs(), - ReportMsg = #lgMsg{severity = ?llvWarning, pid = self(), node = node(), module = ?MODULE, function = ?FUNCTION_NAME, line = ?LINE, metadata = [], timestamp = NowMs, message = ReportStr, destinations = []}, + ReportMsg = #lgMsg{severity = ?llvWarning, pid = self(), module = ?MODULE, function = ?FUNCTION_NAME, line = ?LINE, metadata = [], timestamp = NowMs, message = ReportStr, destinations = []}, writeLog(State, NowMs, ?llvWarning, FmtTer:format(ReportMsg, FmtCfg)) end, {noreply, writeLog(TemState#state{shaper = NewShaper}, Timestamp, Severity, FmtTer:format(Message, FmtCfg))}; @@ -165,7 +165,7 @@ handleInfo({mShaperExpired, FBName}, #state{shaper = Shaper, fBName = FBName, fm Dropped -> ReportStr = eFmt:format(<<"lgBkdFile dropped ~p messages in the last second that exceeded the limit of ~p messages/sec">>, [Dropped, Shaper#lgShaper.hwm]), NowMs = lgTime:nowMs(), - ReportMsg = #lgMsg{severity = ?llvWarning, pid = self(), node = node(), module = ?MODULE, function = ?FUNCTION_NAME, line = ?LINE, metadata = [], timestamp = NowMs, message = ReportStr, destinations = []}, + ReportMsg = #lgMsg{severity = ?llvWarning, pid = self(), module = ?MODULE, function = ?FUNCTION_NAME, line = ?LINE, metadata = [], timestamp = NowMs, message = ReportStr, destinations = []}, writeLog(State, NowMs, ?llvWarning, FmtTer:format(ReportMsg, FmtCfg)) end, {noreply, State#state{shaper = Shaper#lgShaper{dropped = 0}}}; @@ -184,6 +184,7 @@ code_change(_OldVsn, State, _Extra) -> writeLog(#state{fileName = FileName, fd = Fd, inode = Inode, cTime = CTime, flap = Flap, size = RotSize, rotator = Rotator, lastCheck = LastCheck, checkInt = CheckInt, syncSize = SyncSize, syncInt = SyncInt} = State, Timestamp, Level, Msg) -> case isWriteCheck(Fd, LastCheck, CheckInt, FileName, Inode, CTime, Timestamp) of true -> + io:format("IMY****************111 ~p ~p ~p~n", [Fd, CheckInt, Timestamp]), %% need to check for rotation case Rotator:ensureLogFile(FileName, Fd, Inode, CTime, {SyncSize, SyncInt}) of {ok, NewFD, NewInode, NewCTime, FileSize} -> @@ -201,6 +202,7 @@ writeLog(#state{fileName = FileName, fd = Fd, inode = Inode, cTime = CTime, flap ?lgCASE(Flap, State, begin ?INT_LOG(?llvError, <<"Failed to reopen log file ~ts with error ~s">>, [FileName, file:format_error(Reason)]), State#state{flap = true} end) end; _ -> + io:format("IMY***************222 ~p ~p ~p~n", [Fd, CheckInt, Timestamp]), writeFile(State, Level, Msg) end. @@ -225,15 +227,17 @@ writeFile(#state{fd = Fd, fileName = FileName, flap = Flap, syncOn = SyncOn} = S State end. -isWriteCheck(Fd, LastCheck, CheckInt, Name, Inode, CTime, Timestamp) -> +isWriteCheck(undefined, _LastCheck, _CheckInt, _Name, _Inode, _CTime, _Timestamp) -> + true; +isWriteCheck(_Fd, LastCheck, CheckInt, Name, Inode, CTime, Timestamp) -> DiffTime = abs(Timestamp - LastCheck), - case DiffTime >= CheckInt orelse Fd == undefined of + case DiffTime >= CheckInt of true -> - true; - _ -> % We need to know if the file has changed "out from under eLog" so we don't write to an invalid Fd {Result, _FInfo} = lgUtil:isFileChanged(Name, Inode, CTime), - Result + Result; + _ -> + false end. %% Convert the config into a gen_event handler ID diff --git a/src/eLog.erl b/src/eLog.erl index 6ed32fa..0103dd0 100644 --- a/src/eLog.erl +++ b/src/eLog.erl @@ -13,8 +13,8 @@ , stop/0 %% log and log param - , dispatchLog/12 - , doLogImpl/12 + , dispatchLog/11 + , doLogImpl/11 , safeFormat/3 , unsafeFormat/2 , getMd/0 @@ -75,19 +75,17 @@ start() -> stop() -> application:stop(eLog). --spec dispatchLog(atom(), lgAtomLevel(), pid(), node(), atom(), atom(), integer(), list(), string(), list() | none, pos_integer(), safe | unsafe) -> ok. -dispatchLog(Sink, Severity, Pid, Node, Module, Function, Line, Metadata, Format, Args, Size, Safety) -> - ?eLogCfg:get(Sink) band Severity == Severity andalso doLogImpl(Severity, Pid, Node, Module, Function, Line, Metadata, Format, Args, Size, Sink, Safety). - -doLogImpl(Severity, Pid, Node, Module, Function, Line, Metadata, Format, Args, Size, Sink, Safety) -> - TraceFilters = lgConfig:ptGet({Sink, trace}, []), - Destinations = ?lgCASE(TraceFilters =/= [], lgUtil:check_traces(Metadata, Severity, TraceFilters, []), []), +-spec dispatchLog(atom(), lgAtomLevel(), pid(), atom(), atom(), integer(), list(), string(), list() | none, pos_integer(), safe | unsafe) -> ok. +dispatchLog(Sink, Severity, Pid, Module, Function, Line, Metadata, Format, Args, Size, Safety) -> + ?eLogCfg:get(Sink) band Severity == Severity andalso doLogImpl(Severity, Pid, Module, Function, Line, Metadata, Format, Args, Size, Sink, Safety). +doLogImpl(Severity, Pid, Module, Function, Line, Metadata, Format, Args, Size, Sink, Safety) -> + % TraceFilters = lgConfig:ptGet({Sink, trace}, []), %% 这个功能还没用上 + % Destinations = [], % %% 这个功能还没用上 ?lgCASE(TraceFilters =/= [], lgUtil:check_traces(Metadata, Severity, TraceFilters, []), []), MsgStr = ?lgCASE(Args =/= [] andalso Args =/= undefined, ?lgCASE(Safety == safe, safeFormat(Format, Args, [{charsLimit, Size}]), unsafeFormat(Format, Args)), Format), NowMs = lgTime:nowMs(), - LgMsg = #lgMsg{severity = Severity, pid = Pid, node = Node, module = Module, function = Function, line = Line, metadata = Metadata, timestamp = NowMs, message = MsgStr, destinations = Destinations}, - - case lgConfig:ptGet({Sink, async}, false) of + LgMsg = #lgMsg{severity = Severity, pid = Pid, module = Module, function = Function, line = Line, metadata = Metadata, timestamp = NowMs, message = MsgStr, destinations = []}, + case lgConfig:ptGet({Sink, async}, true) of true -> gen_emm:info_notify(Sink, {mWriteLog, LgMsg}); _ -> diff --git a/src/errLogger/lgErrLoggerH.erl b/src/errLogger/lgErrLoggerH.erl index 3b0f9ee..f1d97eb 100644 --- a/src/errLogger/lgErrLoggerH.erl +++ b/src/errLogger/lgErrLoggerH.erl @@ -45,30 +45,30 @@ true -> if is_pid(PidOrMd) -> - eLog:doLogImpl(Severity, PidOrMd, node(), 'Undef', 'Undef', 0, [], Msg, [], -1, Sink, safe); + eLog:doLogImpl(Severity, PidOrMd, 'Undef', 'Undef', 0, [], Msg, [], -1, Sink, safe); is_list(PidOrMd) -> {_, LogPid} = lists:keyfind(pid, 1, PidOrMd), - eLog:doLogImpl(Severity, LogPid, node(), 'Undef', 'Undef', 0, lists:keydelete(pid, 1, PidOrMd), Msg, [], -1, Sink, safe); + eLog:doLogImpl(Severity, LogPid, 'Undef', 'Undef', 0, lists:keydelete(pid, 1, PidOrMd), Msg, [], -1, Sink, safe); true -> - eLog:doLogImpl(Severity, list_to_pid("<0.0.0>"), node(), 'Undef', 'Undef', 0, [], Msg, [{tag, PidOrMd}], -1, Sink, safe) + eLog:doLogImpl(Severity, list_to_pid("<0.0.0>"), 'Undef', 'Undef', 0, [], Msg, [{tag, PidOrMd}], -1, Sink, safe) end, logged; _ -> no_log end). -% doLogImpl(Severity, Pid, Node, Module, Function, Line, Metadata, Format, Args, Size, Sink, Safety) +% doLogImpl(Severity, Pid, Module, Function, Line, Metadata, Format, Args, Size, Sink, Safety) -define(LOGFMT(Sink, Severity, PidOrMd, Fmt, Args), case ?LgShouldLog(Sink, Severity) of true -> if is_pid(PidOrMd) -> - eLog:doLogImpl(Severity, PidOrMd, node(), 'Undef', 'Undef', 0, [], Fmt, Args, -1, Sink, safe); + eLog:doLogImpl(Severity, PidOrMd, 'Undef', 'Undef', 0, [], Fmt, Args, -1, Sink, safe); is_list(PidOrMd) -> {_, LogPid} = lists:keyfind(pid, 1, PidOrMd), - eLog:doLogImpl(Severity, LogPid, node(), 'Undef', 'Undef', 0, lists:keydelete(pid, 1, PidOrMd), Fmt, Args, -1, Sink, safe); + eLog:doLogImpl(Severity, LogPid, 'Undef', 'Undef', 0, lists:keydelete(pid, 1, PidOrMd), Fmt, Args, -1, Sink, safe); true -> - eLog:doLogImpl(Severity, list_to_pid("<0.0.0>"), node(), 'Undef', 'Undef', 0, [{tag, PidOrMd}], Fmt, Args, -1, Sink, safe) + eLog:doLogImpl(Severity, list_to_pid("<0.0.0>"), 'Undef', 'Undef', 0, [{tag, PidOrMd}], Fmt, Args, -1, Sink, safe) end, logged; _ -> no_log diff --git a/src/formatter/lgFmtTer.erl b/src/formatter/lgFmtTer.erl index bf032c7..480e1a3 100644 --- a/src/formatter/lgFmtTer.erl +++ b/src/formatter/lgFmtTer.erl @@ -72,14 +72,14 @@ fmtCfg(MetaWhitelist) -> output(message, LgMsg) -> LgMsg#lgMsg.message; output(datetime, LgMsg) -> lgUtil:msToBinStr(LgMsg#lgMsg.timestamp); output(pid, LgMsg) -> pid_to_list(LgMsg#lgMsg.pid); -output(node, LgMsg) -> atom_to_binary(LgMsg#lgMsg.node, utf8); +output(node, _LgMsg) -> ?eLogCfg:get(?eLogNodeName); output(module, LgMsg) -> atom_to_binary(LgMsg#lgMsg.module, utf8); output(function, LgMsg) -> atom_to_binary(LgMsg#lgMsg.function, utf8); output(line, LgMsg) -> integer_to_binary(LgMsg#lgMsg.line); output(severity, LgMsg) -> loSeverity(LgMsg#lgMsg.severity); output(upSeverity, LgMsg) -> upSeverity(LgMsg#lgMsg.severity); output(blank, _LgMsg) -> <<" ">>; -output(node, LgMsg) -> atom_to_binary(LgMsg#lgMsg.node, utf8); +output(node, _LgMsg) -> ?eLogCfg:get(?eLogNodeName); output(sev, LgMsg) -> sevSeverity(LgMsg#lgMsg.severity); output(metadata, LgMsg) -> mdJoin(LgMsg#lgMsg.metadata, <<"|">>, <<>>); output({blank, Fill}, _LgMsg) -> Fill; @@ -113,14 +113,14 @@ output(Other, _) -> makeStr(Other). output(message, LgMsg, _Width) -> LgMsg#lgMsg.message; output(datetime, LgMsg, _Width) -> lgUtil:msToBinStr(LgMsg#lgMsg.timestamp); output(pid, LgMsg, _Width) -> pid_to_list(LgMsg#lgMsg.pid); -output(node, LgMsg, _Width) -> atom_to_binary(LgMsg#lgMsg.node, utf8); +output(node, _LgMsg, _Width) -> ?eLogCfg:get(?eLogNodeName); output(module, LgMsg, _Width) -> atom_to_binary(LgMsg#lgMsg.module, utf8); output(function, LgMsg, _Width) -> atom_to_binary(LgMsg#lgMsg.function, utf8); output(line, LgMsg, _Width) -> integer_to_binary(LgMsg#lgMsg.line); output(severity, LgMsg, _Width) -> loSeverity(LgMsg#lgMsg.severity); output(upSeverity, LgMsg, _Width) -> upSeverity(LgMsg#lgMsg.severity); output(blank, _LgMsg, _Width) -> <<" ">>; -output(node, LgMsg, _Width) -> atom_to_binary(LgMsg#lgMsg.node, utf8); +output(node, _LgMsg, _Width) -> ?eLogCfg:get(?eLogNodeName); output(sev, LgMsg, _Width) -> sevSeverity(LgMsg#lgMsg.severity); output({blank, Fill}, _LgMsg, _Width) -> Fill; output(metadata, LgMsg, _Width) -> mdJoin(LgMsg#lgMsg.metadata, <<"|">>, <<>>);