diff --git a/include/eLog.hrl b/include/eLog.hrl index 3f4f092..a093ea2 100644 --- a/include/eLog.hrl +++ b/include/eLog.hrl @@ -26,7 +26,7 @@ 0 -> ok; _ -> - eLog:doLogImpl(Severity, Pid, Node, Module, Function, Line, Metadata, Format, Args, Severity, Size, Sink, Safety) + eLog:doLogImpl(Severity, Pid, Node, Module, Function, Line, Metadata, Format, Args, Size, Sink, Safety) end). -define(lgNone(Format), ?lgLog(?none, Format, undefined, safe)). diff --git a/include/lgDef.hrl b/include/lgDef.hrl index 2a30f43..3c4b446 100644 --- a/include/lgDef.hrl +++ b/include/lgDef.hrl @@ -94,11 +94,11 @@ , timer = make_ref() :: reference() %% optional filter fun to avoid counting suppressed messages against Hwm totals %% 可选的过滤器函数,以避免对Hwm总数计算抑制消息 - , filter = fun(_) -> false end :: fun() + , filter :: fun() %% fun(_) -> false end :: fun() }). -record(lgMsg, { - severity :: lgAtomLevel() + severity :: lgNumLevel() , pid :: pid() , node :: node() , module :: module() @@ -115,6 +115,7 @@ -type lgMsg() :: #lgMsg{}. -type lgAtomLevel() :: none | debug | info | notice | warning | error | critical | alert | emergency. +-type lgNumLevel() :: 0 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128. -type lgMaskLevel() :: 0..256. %% 日志等级列表 diff --git a/rebar.config b/rebar.config index b268a46..614566f 100644 --- a/rebar.config +++ b/rebar.config @@ -7,7 +7,8 @@ warn_export_vars, warn_obsolete_guard, warn_untyped_record, - warn_unused_import + warn_unused_import, + {i, "include"} % do NOT include warnings_as_errors, as rebar includes these options % when compiling for eunit, and at least one test module has code that % is deliberatly broken and will generate an un-maskable warning diff --git a/src/eLog.erl b/src/eLog.erl index f56a737..68ea7d8 100644 --- a/src/eLog.erl +++ b/src/eLog.erl @@ -14,7 +14,7 @@ %% log and log param , dispatchLog/12 - , doLogImpl/13 + , doLogImpl/12 , safeFormat/3 , unsafeFormat/2 , getMd/0 @@ -78,12 +78,12 @@ stop() -> dispatchLog(Sink, Severity, Pid, Node, Module, Function, Line, Metadata, Format, Args, Size, Safety) -> case ?eLogCfg:get(Sink) band Severity =/= 0 of true -> - doLogImpl(Severity, Pid, Node, Module, Function, Line, Metadata, Format, Args, Severity, Size, Sink, Safety); + doLogImpl(Severity, Pid, Node, Module, Function, Line, Metadata, Format, Args, Size, Sink, Safety); _ -> ok end. -doLogImpl(Severity, Pid, Node, Module, Function, Line, Metadata, Format, Args, Severity, Size, Sink, Safety) -> +doLogImpl(Severity, Pid, Node, Module, Function, Line, Metadata, Format, Args, Size, Sink, Safety) -> TraceFilters = lgConfig:ptGet({Sink, trace}, []), Destinations = ?IIF(TraceFilters =/= [], lgUtil:check_traces(Metadata, Severity, TraceFilters, []), []), diff --git a/src/errLogger/lgErrLoggerH.erl b/src/errLogger/lgErrLoggerH.erl index 3a08a5f..708f2ae 100644 --- a/src/errLogger/lgErrLoggerH.erl +++ b/src/errLogger/lgErrLoggerH.erl @@ -35,18 +35,18 @@ raw :: boolean() }). --define(LOGMSG(Sink, Level, Pid, Msg), - case ?LgShouldLog(Sink, Level) of +-define(LOGMSG(Sink, Severity, Pid, Msg), + case ?LgShouldLog(Sink, Severity) of true -> - _ = eLog:log(Sink, Level, Pid, Msg, []), + eLog:doLogImpl(Severity, Pid, undefined, undefined, undefined, 0, [], Msg, [], 0, Sink, safe), logged; _ -> no_log end). --define(LOGFMT(Sink, Level, Pid, Fmt, Args), - case ?LgShouldLog(Sink, Level) of +-define(LOGFMT(Sink, Severity, Pid, Fmt, Args), + case ?LgShouldLog(Sink, Severity) of true -> - _ = eLog:log(Sink, Level, Pid, Fmt, Args), + eLog:doLogImpl(Severity, Pid, undefined, undefined, undefined, 0, [], Fmt, Args, 0, Sink, safe), logged; _ -> no_log end). @@ -76,22 +76,26 @@ handle_call({mSetHighWater, N}, #state{shaper = Shaper} = State) -> NewShaper = Shaper#lgShaper{hwm = N}, {ok, ok, State#state{shaper = NewShaper}}; handle_call(_Request, State) -> + io:format("IMY*********************handle_call111"), {ok, unknown_call, State}. handle_event(Event, #state{sink = Sink, shaper = Shaper} = State) -> io:format("IMY**********************111111111 ~p~n", [Event]), case lgUtil:checkHwm(Shaper, Event) of {true, _Drop, NewShaper} -> + io:format("IMY**********************1111111110-0000 ~p~n", [Event]), evalGl(Event, State#state{shaper = NewShaper}); {drop, Drop, NewShaper} -> + io:format("IMY**********************1111111110-111 ~p~n", [Event]), case Drop =< 0 of true -> {ok, State#state{shaper = NewShaper}}; _ -> - ?LOGFMT(Sink, warning, self(), "lager_error_logger_h dropped ~p messages in the last second that exceeded the limit of ~p messages/sec", [Drop, NewShaper#lgShaper.hwm]), + ?LOGFMT(Sink, ?warning, self(), "lager_error_logger_h dropped ~p messages in the last second that exceeded the limit of ~p messages/sec", [Drop, NewShaper#lgShaper.hwm]), evalGl(Event, State#state{shaper = NewShaper}) end; {false, _, NewShaper} -> + io:format("IMY**********************1111111110-2222 ~p~n", [Event]), {ok, State#state{shaper = NewShaper}} end. @@ -100,10 +104,11 @@ handle_info({mShaperExpired, ?MODULE}, #state{sink = Sink, shaper = Shaper} = St 0 -> ignore; Dropped -> - ?LOGFMT(Sink, warning, self(), "lager_error_logger_h dropped ~p messages in the last second that exceeded the limit of ~p messages/sec", [Dropped, Shaper#lgShaper.hwm]) + ?LOGFMT(Sink, ?warning, self(), "lager_error_logger_h dropped ~p messages in the last second that exceeded the limit of ~p messages/sec", [Dropped, Shaper#lgShaper.hwm]) end, {ok, State#state{shaper = Shaper#lgShaper{dropped = 0}}}; handle_info(_Info, State) -> + io:format("IMY*********************handle_info111"), {ok, State}. terminate(_Reason, _State) -> @@ -130,9 +135,11 @@ configSink() -> end. evalGl(Event, #state{groupleader_strategy = GlStrategy0} = State) -> + io:format("IMY*********************evalGl000 ~p~n", [Event]), GL = element(2, Event), case is_pid(GL) andalso node(GL) =/= node() of true -> + io:format("IMY*********************evalGl111 ~p~n", [Event]), case GlStrategy0 of ignore -> gen_event:notify({error_logger, node(GL)}, Event), @@ -144,6 +151,7 @@ evalGl(Event, #state{groupleader_strategy = GlStrategy0} = State) -> logEvent(Event, State) end; _ -> + io:format("IMY*********************evalG2222 ~p~n", [Event]), logEvent(Event, State) end. @@ -170,7 +178,7 @@ logEvent(Event, #state{sink = Sink, raw = FormatRaw} = State) -> end, ?CRASH_LOG(Event), {Md, Formatted} = formatReasonMd(Reason), - ?LOGFMT(Sink, error, [{pid, Pid}, {name, Name} | Md], "gen_server ~w terminated with reason: ~s", [Name, Formatted]); + ?LOGFMT(Sink, ?error, [{pid, Pid}, {name, Name} | Md], "gen_server ~w terminated with reason: ~s", [Name, Formatted]); "** gen_ipc State machine " ++ _ -> %% gen_server terminate {Reason, Name} = @@ -187,7 +195,7 @@ logEvent(Event, #state{sink = Sink, raw = FormatRaw} = State) -> end, ?CRASH_LOG(Event), {Md, Formatted} = formatReasonMd(Reason), - ?LOGFMT(Sink, error, [{pid, Pid}, {name, Name} | Md], "gen_ipc ~w terminated with reason: ~s", [Name, Formatted]); + ?LOGFMT(Sink, ?error, [{pid, Pid}, {name, Name} | Md], "gen_ipc ~w terminated with reason: ~s", [Name, Formatted]); "** State machine " ++ _ -> %% Check if the terminated process is gen_fsm or gen_statem %% since they generate the same exit message @@ -210,27 +218,27 @@ logEvent(Event, #state{sink = Sink, raw = FormatRaw} = State) -> end, {Md, Formatted} = formatReasonMd(Reason), ?CRASH_LOG(Event), - ?LOGFMT(Sink, error, [{pid, Pid}, {name, Name} | Md], "~s ~w in state ~w terminated with reason: ~s", [Type, Name, StateName, Formatted]); + ?LOGFMT(Sink, ?error, [{pid, Pid}, {name, Name} | Md], "~s ~w in state ~w terminated with reason: ~s", [Type, Name, StateName, Formatted]); "** gen_event handler" ++ _ -> %% gen_event handler terminate [ID, Name, _Msg, _State, Reason] = Args, {Md, Formatted} = formatReasonMd(Reason), ?CRASH_LOG(Event), - ?LOGFMT(Sink, error, [{pid, Pid}, {name, Name} | Md], "gen_event ~w installed in ~w terminated with reason: ~s", [ID, Name, Formatted]); + ?LOGFMT(Sink, ?error, [{pid, Pid}, {name, Name} | Md], "gen_event ~w installed in ~w terminated with reason: ~s", [ID, Name, Formatted]); "** Cowboy handler" ++ _ -> %% Cowboy HTTP server error ?CRASH_LOG(Event), case Args of [Module, Function, Arity, _Request, _State] -> %% we only get the 5-element list when its a non-exported function - ?LOGFMT(Sink, error, Pid, + ?LOGFMT(Sink, ?error, Pid, "Cowboy handler ~p terminated with reason: call to undefined function ~p:~p/~p", [Module, Module, Function, Arity]); [Module, Function, Arity, _Class, Reason | Tail] -> %% any other cowboy error_format list *always* ends with the stacktrace StackTrace = lists:last(Tail), {Md, Formatted} = formatReasonMd({Reason, StackTrace}), - ?LOGFMT(Sink, error, [{pid, Pid} | Md], + ?LOGFMT(Sink, ?error, [{pid, Pid} | Md], "Cowboy handler ~p terminated in ~p:~p/~p with reason: ~s", [Module, Module, Function, Arity, Formatted]) end; "Ranch listener " ++ _ -> @@ -240,19 +248,19 @@ logEvent(Event, #state{sink = Sink, raw = FormatRaw} = State) -> %% Error logged by cowboy, which starts as ranch error [Ref, ConnectionPid, StreamID, RequestPid, Reason, StackTrace] -> {Md, Formatted} = formatReasonMd({Reason, StackTrace}), - ?LOGFMT(Sink, error, [{pid, RequestPid} | Md], + ?LOGFMT(Sink, ?error, [{pid, RequestPid} | Md], "Cowboy stream ~p with ranch listener ~p and connection process ~p " "had its request process exit with reason: ~s", [StreamID, Ref, ConnectionPid, Formatted]); [Ref, _Protocol, Worker, {[{reason, Reason}, {mfa, {Module, Function, Arity}}, {stacktrace, StackTrace} | _], _}] -> {Md, Formatted} = formatReasonMd({Reason, StackTrace}), - ?LOGFMT(Sink, error, [{pid, Worker} | Md], "Ranch listener ~p terminated in ~p:~p/~p with reason: ~s", [Ref, Module, Function, Arity, Formatted]); + ?LOGFMT(Sink, ?error, [{pid, Worker} | Md], "Ranch listener ~p terminated in ~p:~p/~p with reason: ~s", [Ref, Module, Function, Arity, Formatted]); [Ref, _Protocol, Worker, Reason] -> {Md, Formatted} = formatReasonMd(Reason), - ?LOGFMT(Sink, error, [{pid, Worker} | Md], "Ranch listener ~p terminated with reason: ~s", [Ref, Formatted]); + ?LOGFMT(Sink, ?error, [{pid, Worker} | Md], "Ranch listener ~p terminated with reason: ~s", [Ref, Formatted]); [Ref, Protocol, Ret] -> %% ranch_conns_sup.erl module line 119-123 has three parameters error msg, log it. {Md, Formatted} = formatReasonMd(Ret), - ?LOGFMT(Sink, error, [{pid, Protocol} | Md], "Ranch listener ~p terminated with result:~s", [Ref, Formatted]) + ?LOGFMT(Sink, ?error, [{pid, Protocol} | Md], "Ranch listener ~p terminated with result:~s", [Ref, Formatted]) end; "webmachine error" ++ _ -> %% Webmachine HTTP server error @@ -267,37 +275,40 @@ logEvent(Event, #state{sink = Sink, raw = FormatRaw} = State) -> Error end, {Md, Formatted} = formatReasonMd(StackTrace), - ?LOGFMT(Sink, error, [{pid, Pid} | Md], "Webmachine error at path ~p : ~s", [Path, Formatted]) + ?LOGFMT(Sink, ?error, [{pid, Pid} | Md], "Webmachine error at path ~p : ~s", [Path, Formatted]); + _ -> + ?CRASH_LOG(Event), + ?LOGFMT(Sink, ?error, Pid, Fmt, Args) end; _ -> ?CRASH_LOG(Event), - ?LOGFMT(Sink, error, Pid, Fmt, Args) + ?LOGFMT(Sink, ?error, Pid, Fmt, Args) end; {error_report, _GL, {Pid, std_error, D}} -> ?CRASH_LOG(Event), - ?LOGMSG(Sink, error, Pid, printSillyList(D)); + ?LOGMSG(Sink, ?error, Pid, printSillyList(D)); {error_report, _GL, {Pid, supervisor_report, D}} -> ?CRASH_LOG(Event), case lists:sort(D) of [{errorContext, Ctx}, {offender, Off}, {reason, Reason}, {supervisor, Name}] -> Offender = formatOffender(Off), {Md, Formatted} = formatReasonMd(Reason), - ?LOGFMT(Sink, error, [{pid, Pid} | Md], + ?LOGFMT(Sink, ?error, [{pid, Pid} | Md], "Supervisor ~w had child ~s exit with reason ~s in context ~w", [supervisorName(Name), Offender, Formatted, Ctx]); _ -> - ?LOGMSG(Sink, error, Pid, <<"SUPERVISOR REPORT ", (printSillyList(D))/binary>>) + ?LOGMSG(Sink, ?error, Pid, <<"SUPERVISOR REPORT ", (printSillyList(D))/binary>>) end; {error_report, _GL, {Pid, crash_report, [Self, Neighbours]}} -> ?CRASH_LOG(Event), {Md, Formatted} = formatCrashReport(Self, Neighbours), - ?LOGMSG(Sink, error, [{pid, Pid} | Md], "CRASH REPORT " ++ Formatted); + ?LOGMSG(Sink, ?error, [{pid, Pid} | Md], "CRASH REPORT " ++ Formatted); {warning_msg, _GL, {Pid, Fmt, Args}} -> - ?LOGFMT(Sink, warning, Pid, Fmt, Args); + ?LOGFMT(Sink, ?warning, Pid, Fmt, Args); {warning_report, _GL, {Pid, std_warning, Report}} -> - ?LOGMSG(Sink, warning, Pid, printSillyList(Report)); + ?LOGMSG(Sink, ?warning, Pid, printSillyList(Report)); {info_msg, _GL, {Pid, Fmt, Args}} -> - ?LOGFMT(Sink, info, Pid, Fmt, Args); + ?LOGFMT(Sink, ?info, Pid, Fmt, Args); {info_report, _GL, {Pid, std_info, D}} when is_list(D) -> Details = lists:sort(D), case Details of @@ -307,13 +318,13 @@ logEvent(Event, #state{sink = Sink, raw = FormatRaw} = State) -> no_log; _ -> {Md, Formatted} = formatReasonMd(Reason), - ?LOGFMT(Sink, info, [{pid, Pid} | Md], "Application ~w exited with reason: ~s", [App, Formatted]) + ?LOGFMT(Sink, ?info, [{pid, Pid} | Md], "Application ~w exited with reason: ~s", [App, Formatted]) end; _ -> - ?LOGMSG(Sink, info, Pid, printSillyList(D)) + ?LOGMSG(Sink, ?info, Pid, printSillyList(D)) end; {info_report, _GL, {Pid, std_info, D}} -> - ?LOGFMT(Sink, info, Pid, "~w", [D]); + ?LOGFMT(Sink, ?info, Pid, "~w", [D]); {info_report, _GL, {P, progress, D}} -> Details = lists:sort(D), case Details of @@ -322,7 +333,7 @@ logEvent(Event, #state{sink = Sink, raw = FormatRaw} = State) -> true -> no_log; _ -> - ?LOGFMT(Sink, info, P, "Application ~w started on node ~w", [App, Node]) + ?LOGFMT(Sink, ?info, P, "Application ~w started on node ~w", [App, Node]) end; [{started, Started}, {supervisor, Name}] -> case lgUtil:get_env(suppressSupStartStop, false) of @@ -331,14 +342,14 @@ logEvent(Event, #state{sink = Sink, raw = FormatRaw} = State) -> _ -> MFA = formatMfa(get_value(mfargs, Started)), Pid = get_value(pid, Started), - ?LOGFMT(Sink, debug, P, "Supervisor ~w started ~s at pid ~w", + ?LOGFMT(Sink, ?debug, P, "Supervisor ~w started ~s at pid ~w", [supervisorName(Name), MFA, Pid]) end; _ -> - ?LOGMSG(Sink, info, P, <<"PROGRESS REPORT ", (printSillyList(D))/binary>>) + ?LOGMSG(Sink, ?info, P, <<"PROGRESS REPORT ", (printSillyList(D))/binary>>) end; _ -> - ?LOGFMT(Sink, warning, self(), "Unexpected error_logger event ~w", [Event]) + ?LOGFMT(Sink, ?warning, self(), "Unexpected error_logger event ~w", [Event]) end, case DidLog of logged -> diff --git a/src/testl.erl b/src/testl.erl index f86c545..be779a2 100644 --- a/src/testl.erl +++ b/src/testl.erl @@ -1,6 +1,7 @@ -module(testl). -include("eLog.hrl"). +-include("lgDef.hrl"). -compile([export_all, nowarn_export_all]). @@ -9,3 +10,9 @@ test(Msg) -> tt() -> ?lgError("IMYYYYYYYYYYYYYYY111") . + +ee1() -> + logger:error("IMY****************ee"), + ?ERR("fdddddddfddffffffffffff"), + error_logger:error_info("fdsfsdfsfdsfs"). + diff --git a/src/utils/lgUtil.erl b/src/utils/lgUtil.erl index 6a434ae..3a68c55 100644 --- a/src/utils/lgUtil.erl +++ b/src/utils/lgUtil.erl @@ -520,7 +520,7 @@ find_file(File1, [_HandlerInfo | Handlers]) -> %% conditionally check the Hwm if the event would not have been filtered checkHwm(Shaper = #lgShaper{filter = Filter}, Event) -> - case Filter(Event) of + case Filter =/= undefined andalso Filter(Event) of true -> {true, 0, Shaper}; _ ->