diff --git a/include/eRum.hrl b/include/eRum.hrl index a49afea..0e3d2ec 100644 --- a/include/eRum.hrl +++ b/include/eRum.hrl @@ -16,9 +16,6 @@ %% 进程字典Key - --define(RumBackendThrottle, rumBackendThrottle). - %% 默认日志文件选项 -define(RumDefHandler, [ @@ -65,7 +62,7 @@ -define(RunShouldLog(Level), (rumUtil:levelToNum(Level) band element(1, rumConfig:get(loglevel, {?LOG_NONE, []}))) /= 0). -define(RunNotify(Level, Pid, Format, Args), - gen_event:notify(rumEvent, {log, rumMsg:new(io_lib:format(Format, Args), Level, [{pid, Pid}, {line, ?LINE}, {file, ?FILE}, {module, ?MODULE}], [])})). + gen_event:notify(rumEvent, {mWriteLog, rumMsg:new(io_lib:format(Format, Args), Level, [{pid, Pid}, {line, ?LINE}, {file, ?FILE}, {module, ?MODULE}], [])})). %%仅供内部使用仅内部非阻塞日志记录调用,当我们仍在启动大型啤酒时尝试进行日志记录(通常为错误)时,会有一些特殊处理。 -ifdef(TEST). diff --git a/src/backend/rumBackendConsole.erl b/src/backend/rumBackendConsole.erl index b52b7b6..3dc9d0c 100644 --- a/src/backend/rumBackendConsole.erl +++ b/src/backend/rumBackendConsole.erl @@ -156,7 +156,7 @@ handle_call(_Request, State) -> {ok, ok, State}. %% @private -handle_event({log, Message}, +handle_event({mWriteLog, Message}, #state{level = L, out = Out, formatter = Formatter, format_config = FormatConfig, colors = Colors, id = ID} = State) -> case rumUtil:is_loggable(Message, L, ID) of true -> diff --git a/src/backend/rumBackendFile.erl b/src/backend/rumBackendFile.erl index 2dfa8a1..4f871d0 100644 --- a/src/backend/rumBackendFile.erl +++ b/src/backend/rumBackendFile.erl @@ -134,14 +134,14 @@ handle_call({set_loghwm, Hwm}, #state{shaper = Shaper, name = Name} = State) -> ?INT_LOG(notice, "Changed loghwm of ~ts to ~p", [Name, Hwm]), {ok, {last_loghwm, Shaper#rumShaper.hwm}, State#state{shaper = NewShaper}} end; -handle_call(rotate, State = #state{name = File}) -> - {ok, NewState} = handle_info({rotate, File}, State), +handle_call(mRotate, State = #state{name = File}) -> + {ok, NewState} = handle_info({mRotate, File}, State), {ok, ok, NewState}; handle_call(_Request, State) -> {ok, ok, State}. %% @private -handle_event({log, Message}, +handle_event({mWriteLog, Message}, #state{name = Name, level = L, shaper = Shaper, formatter = Formatter, formatter_config = FormatConfig} = State) -> case rumUtil:is_loggable(Message, L, {lager_file_backend, Name}) of true -> @@ -171,7 +171,7 @@ handle_event(_Event, State) -> {ok, State}. %% @private -handle_info({rotate, File}, #state{name = File, count = Count, date = Date, rotator = Rotator} = State0) -> +handle_info({mRotate, File}, #state{name = File, count = Count, date = Date, rotator = Rotator} = State0) -> State1 = close_file(State0), _ = Rotator:rotateLogfile(File, Count), schedule_rotation(File, Date), @@ -446,7 +446,7 @@ validate_logfile_proplist([Other | _Tail], _Acc) -> schedule_rotation(_, undefined) -> ok; schedule_rotation(Name, Date) -> - erlang:send_after(rumUtil:calculate_next_rotation(Date) * 1000, self(), {rotate, Name}), + erlang:send_after(rumUtil:calcNextRotate(Date) * 1000, self(), {mRotate, Name}), ok. close_file(#state{fd = undefined} = State) -> @@ -501,7 +501,7 @@ rotation_test_() -> % while a process has an open file handle referencing it ok; _ -> - {ok, {FD, Inode, Ctime, _Size}} = Rotator:openLogfile(TestLog, {SyncSize, SyncInterval}), + {ok, FD, Inode, Ctime, _Size} = Rotator:openLogfile(TestLog, {SyncSize, SyncInterval}), State0 = DefaultState#state{fd = FD, inode = Inode, ctime = Ctime}, State1 = write(State0, os:timestamp(), ?DEBUG, "hello world"), ?assertMatch(#state{name = TestLog, level = ?DEBUG, fd = FD, inode = Inode, ctime = Ctime}, State1), @@ -528,7 +528,7 @@ rotation_test_() -> RotationSize = 15, PreviousCheck = os:timestamp(), - {ok, {FD, Inode, Ctime, _Size}} = Rotator:openLogfile(TestLog, {SyncSize, SyncInterval}), + {ok, FD, Inode, Ctime, _Size} = Rotator:openLogfile(TestLog, {SyncSize, SyncInterval}), State0 = DefaultState#state{ fd = FD, inode = Inode, ctime = Ctime, size = RotationSize, check_interval = CheckInterval, last_check = PreviousCheck}, @@ -780,7 +780,7 @@ filesystem_test_() -> [{file, TestLog}, {level, info}, {check_interval, 1000}]), eRum:log(error, self(), "Test message1"), eRum:log(error, self(), "Test message1"), - whereis(rumEvent) ! {rotate, TestLog}, + whereis(rumEvent) ! {mRotate, TestLog}, eRum:log(error, self(), "Test message1"), ?assert(filelib:is_regular(TestLog0)) end}, @@ -794,7 +794,7 @@ filesystem_test_() -> [{file, TestLog}, {level, info}, {check_interval, 1000}]), eRum:log(error, self(), "Test message1"), eRum:log(error, self(), "Test message1"), - gen_event:call(rumEvent, {lager_file_backend, TestLog}, rotate, infinity), + gen_event:call(rumEvent, {lager_file_backend, TestLog}, mRotate, infinity), eRum:log(error, self(), "Test message1"), ?assert(filelib:is_regular(TestLog0)) end}, diff --git a/src/backend/rumBackendThrottle.erl b/src/backend/rumBackendThrottle.erl index 883dcf2..425b9fc 100644 --- a/src/backend/rumBackendThrottle.erl +++ b/src/backend/rumBackendThrottle.erl @@ -37,7 +37,7 @@ handle_call({set_loglevel, _Level}, State) -> handle_call(_Request, State) -> {ok, ok, State}. -handle_event({log, _Message}, State) -> +handle_event({mWriteLog, _Message}, State) -> {message_queue_len, Len} = erlang:process_info(self(), message_queue_len), case {Len > State#state.hwm, Len < State#state.window_min, State#state.async} of {true, _, true} -> diff --git a/src/crashLog/rumCrashLog.erl b/src/crashLog/rumCrashLog.erl index 214388c..281558c 100644 --- a/src/crashLog/rumCrashLog.erl +++ b/src/crashLog/rumCrashLog.erl @@ -33,72 +33,66 @@ -record(state, { - fileName :: string(), %% 文件名 - fd :: pid() | undefined, %% 文件句柄 - inode :: integer() | undefined, - ctime :: file:date_time() | undefined, %% 文件创建时间 - fmtmaxbytes :: integer(), %% 单个消息最大字节数 - size :: integer(), %% 单个日志文件最大字节数 - date :: undefined | string(), %% 旋转的时间格式 - count :: integer(), %% 要保留的已轮转崩溃日志的数量 - flap = false :: boolean(), %% ???? 这是干啥的呢 - rotator :: atom() %% 旋转模块 + fileName :: string() %% 文件名 + , fd :: pid() | undefined %% 文件句柄 + , inode :: integer() | undefined %% 文件inode信息 + , ctime :: file:date_time() | undefined %% 文件创建时间 + , maxFmtSize :: integer() %% 单个消息最大字节数 + , maxFileSize :: integer() %% 单个日志文件最大字节数 + , date :: undefined | string() %% 旋转的时间格式 + , count :: integer() %% 要保留的已轮转崩溃日志的数量 + , flap = false :: boolean() %% ???? 这是干啥的呢 + , rotator :: atom() %% 旋转模块实例 }). -start(Filename, MaxBytes, Size, Date, Count, Rotator) -> - gen_srv:start({local, ?MODULE}, ?MODULE, {Filename, MaxBytes, Size, Date, Count, Rotator}, []). +start(Filename, MaxFmtSize, MaxFileSize, Date, Count, Rotator) -> + gen_srv:start({local, ?MODULE}, ?MODULE, {Filename, MaxFmtSize, MaxFileSize, Date, Count, Rotator}, []). -start_link(Filename, MaxBytes, Size, Date, Count, Rotator) -> - gen_srv:start_link({local, ?MODULE}, ?MODULE, {Filename, MaxBytes, Size, Date, Count, Rotator}, []). +start_link(Filename, MaxFmtSize, MaxFileSize, Date, Count, Rotator) -> + gen_srv:start_link({local, ?MODULE}, ?MODULE, {Filename, MaxFmtSize, MaxFileSize, Date, Count, Rotator}, []). -% File, MsgMaxBytes, RotationSize, RotationDate, RotationCount, RotationMod - -init({RelFilename, MaxBytes, Size, Date, Count, Rotator}) -> +init({RelFilename, MaxFmtSize, MaxFileSize, Date, Count, Rotator}) -> Filename = rumUtil:parsePath(RelFilename), case Rotator:openLogFile(Filename, false) of - {ok, {FD, Inode, Ctime, _Size}} -> - schedule_rotation(Date), - {ok, #state{fileName = Filename, fd = FD, inode = Inode, ctime = Ctime, fmtmaxbytes = MaxBytes, size = Size, count = Count, date = Date, rotator = Rotator}}; + {ok, Fd, Inode, Ctime, _Size} -> + scheduleRotation(Date), + {ok, #state{fileName = Filename, fd = Fd, inode = Inode, ctime = Ctime, maxFmtSize = MaxFmtSize, maxFileSize = MaxFileSize, date = Date, count = Count, rotator = Rotator}}; {error, Reason} -> - ?INT_LOG(error, "Failed to open crash log file ~ts with error: ~s", - [Filename, file:format_error(Reason)]), - {ok, #state{fileName = Filename, fmtmaxbytes = MaxBytes, flap = true, size = Size, count = Count, date = Date, rotator = Rotator}} + ?INT_LOG(error, "Failed to open crash log file ~ts with error: ~s", [Filename, file:format_error(Reason)]), + {ok, #state{fileName = Filename, maxFmtSize = MaxFmtSize, maxFileSize = MaxFileSize, date = Date, count = Count, flap = true, rotator = Rotator}} end. -handleCall({log, _} = Log, State, _From) -> - {Reply, NewState} = do_log(Log, State), +handleCall({mWriteLog, Event}, State, _From) -> + {Reply, NewState} = writeLog(Event, State), {reply, Reply, NewState}; handleCall(_Msg, _State, _From) -> ?ERR("~p call receive unexpect msg ~p ~n ", [?MODULE, _Msg]), {reply, ok}. -handleCast({log, _} = Log, State) -> - {_, NewState} = do_log(Log, State), - {noreply, NewState}; handleCast(_Msg, _State) -> ?ERR("~p cast receive unexpect msg ~p ~n ", [?MODULE, _Msg]), kpS. -handleInfo(rotate, #state{fileName = Name, count = Count, date = Date, rotator = Rotator}) -> +handleInfo({mWriteLog, Event}, State) -> + {_, NewState} = writeLog(Event, State), + {noreply, NewState}; +handleInfo(mRotate, #state{fileName = Name, count = Count, date = Date, rotator = Rotator}) -> _ = Rotator:rotateLogfile(Name, Count), - schedule_rotation(Date), + scheduleRotation(Date), kpS; handleInfo(_Msg, _State) -> ?ERR("~p info receive unexpect msg ~p ~n ", [?MODULE, _Msg]), kpS. -%% @private terminate(_Reason, _State) -> ok. -%% @private code_change(_OldVsn, State, _Extra) -> {ok, State}. -schedule_rotation(undefined) -> - ok; -schedule_rotation(Date) -> - erlang:send_after(rumUtil:calculate_next_rotation(Date) * 1000, self(), rotate), +scheduleRotation(undefined) -> ok; +scheduleRotation(Date) -> + erlang:send_after(rumUtil:calcNextRotate(Date) * 1000, self(), mRotate), ok. %% ===== Begin code lifted from riak_err ===== @@ -167,8 +161,8 @@ sasl_limited_str(progress, Report, FmtMaxBytes) -> sasl_limited_str(crash_report, Report, FmtMaxBytes) -> rumStdlib:proc_lib_format(Report, FmtMaxBytes). -do_log({log, Event}, #state{fileName = Name, fd = FD, inode = Inode, ctime = Ctime, flap = Flap, - fmtmaxbytes = FmtMaxBytes, size = RotSize, count = Count, rotator = Rotator} = State) -> +writeLog(Event, #state{fileName = Name, fd = FD, inode = Inode, ctime = Ctime, flap = Flap, + maxFmtSize = FmtMaxBytes, maxFileSize = RotSize, count = Count, rotator = Rotator} = State) -> %% borrowed from riak_err {ReportStr, Pid, MsgStr, _ErrorP} = case Event of @@ -187,7 +181,7 @@ do_log({log, Event}, #state{fileName = Name, fd = FD, inode = Inode, ctime = Cti case Rotator:ensureLogfile(Name, FD, Inode, Ctime, false) of {ok, {_FD, _Inode, _Ctime, Size}} when RotSize /= 0, Size > RotSize -> _ = Rotator:rotateLogfile(Name, Count), - handleCast({log, Event}, State); + handleCast({mWriteLog, Event}, State); {ok, {NewFD, NewInode, NewCtime, _Size}} -> TimeBinStr = rumUtil:msToBinStr(), Time = [TimeBinStr, " =", ReportStr, "====\n"], diff --git a/src/eRum.erl b/src/eRum.erl index 610e835..dbc2da7 100644 --- a/src/eRum.erl +++ b/src/eRum.erl @@ -175,13 +175,13 @@ do_log_impl(Severity, Metadata, Format, Args, SeverityAsInt, LevelThreshold, Tra Severity, Metadata, Destinations), case rumConfig:get({Sink, async}, false) of true -> - gen_event:notify(SinkPid, {log, LagerMsg}); + gen_event:notify(SinkPid, {mWriteLog, LagerMsg}); false -> - gen_event:sync_notify(SinkPid, {log, LagerMsg}) + gen_event:sync_notify(SinkPid, {mWriteLog, LagerMsg}) end, case TraceSinkPid /= undefined of true -> - gen_event:notify(TraceSinkPid, {log, LagerMsg}); + gen_event:notify(TraceSinkPid, {mWriteLog, LagerMsg}); false -> ok end; @@ -715,7 +715,7 @@ rotate_handler(Handler) -> end. rotate_handler(Handler, Sink) -> - gen_event:call(Sink, Handler, rotate, ?ROTATE_TIMEOUT). + gen_event:call(Sink, Handler, mRotate, ?ROTATE_TIMEOUT). %% @private trace_func(#trace_func_state_v1{pid = Pid, level = Level, format_string = Fmt} = FuncState, Event, ProcState) -> diff --git a/src/eRum_app.erl b/src/eRum_app.erl index c006aa7..8fdffcb 100644 --- a/src/eRum_app.erl +++ b/src/eRum_app.erl @@ -93,9 +93,9 @@ tryStartAsyncMgr(undefined, _Window, _Sink) -> tryStartAsyncMgr(Threshold, Window, Sink) -> case Window of undefined -> - _ = supervisor:start_child(rumHWatcherSup, [Sink, ?RumBackendThrottle, [Threshold, erlang:trunc(Threshold * 0.2)]]); + supervisor:start_child(rumHWatcherSup, [Sink, rumBackendThrottle, [Threshold, erlang:trunc(Threshold * 0.2)]]); _ -> - _ = supervisor:start_child(rumHWatcherSup, [Sink, ?RumBackendThrottle, [Threshold, Window]]) + supervisor:start_child(rumHWatcherSup, [Sink, rumBackendThrottle, [Threshold, Window]]) end, ok. diff --git a/src/errLogger/rumErrLoggerH.erl b/src/errLogger/rumErrLoggerH.erl index 58824ec..3d26f12 100644 --- a/src/errLogger/rumErrLoggerH.erl +++ b/src/errLogger/rumErrLoggerH.erl @@ -44,10 +44,10 @@ -ifdef(TEST). %% Make CRASH synchronous when testing, to avoid timing headaches -define(CRASH_LOG(Event), - catch (gen_server:call(lager_crash_log, {log, Event}))). + catch (gen_srv:call(rumCrashLog, {mWriteLog, Event}))). -else. -define(CRASH_LOG(Event), - gen_server:cast(lager_crash_log, {log, Event})). + gen_srv:send(rumCrashLog, {mWriteLog, Event})). -endif. set_high_water(N) -> diff --git a/src/mgrKiller/rumMgrKiller.erl b/src/mgrKiller/rumMgrKiller.erl index b8a3b1a..d1849d6 100644 --- a/src/mgrKiller/rumMgrKiller.erl +++ b/src/mgrKiller/rumMgrKiller.erl @@ -32,7 +32,7 @@ handle_call(_Request, State) -> %% It's not the best idea in the world to check the queue length for every %% log message. We can make this operation work on a poll timer in the %% future. -handle_event({log, _Message}, State = #state{killerHwm = KillerHWM, killerReTime = KillerReinstallAfter}) -> +handle_event({mWriteLog, _Message}, State = #state{killerHwm = KillerHWM, killerReTime = KillerReinstallAfter}) -> {message_queue_len, Len} = process_info(self(), message_queue_len), case Len > KillerHWM of true -> diff --git a/src/test/lager_common_test_backend.erl b/src/test/lager_common_test_backend.erl index 68ad122..a1cb1c3 100644 --- a/src/test/lager_common_test_backend.erl +++ b/src/test/lager_common_test_backend.erl @@ -17,7 +17,7 @@ -record(state, {level :: {mask, integer()}, formatter :: atom(), format_config :: any(), - log = [] :: list()}). + mWriteLog = [] :: list()}). -include("eRum.hrl"). -define(TERSE_FORMAT, [time, " ", color, "[", severity, "] ", message]). @@ -72,19 +72,19 @@ init(Level) -> -spec(handle_event(tuple(), #state{}) -> {ok, #state{}}). %% @private -handle_event({log, Message}, - #state{level = L, formatter = Formatter, format_config = FormatConfig, log = Logs} = State) -> +handle_event({mWriteLog, Message}, + #state{level = L, formatter = Formatter, format_config = FormatConfig, mWriteLog = Logs} = State) -> case rumUtil:is_loggable(Message, L, ?MODULE) of true -> Log = Formatter:format(Message, FormatConfig), ct:pal(Log), - {ok, State#state{log = [Log | Logs]}}; + {ok, State#state{mWriteLog = [Log | Logs]}}; false -> {ok, State} end; handle_event(Event, State) -> ct:pal(Event), - {ok, State#state{log = [Event | State#state.log]}}. + {ok, State#state{mWriteLog = [Event | State#state.mWriteLog]}}. -spec(handle_call(any(), #state{}) -> {ok, any(), #state{}}). %% @private @@ -98,7 +98,7 @@ handle_call({set_loglevel, Level}, State) -> _ -> {ok, {error, bad_log_level}, State} end; -handle_call(get_logs, #state{log = Logs} = State) -> +handle_call(get_logs, #state{mWriteLog = Logs} = State) -> {ok, lists:reverse(Logs), State}; handle_call(_, State) -> {ok, ok, State}. @@ -117,5 +117,5 @@ code_change(_OldVsn, State, _Extra) -> -spec(terminate(any(), #state{}) -> {ok, list()}). %% @doc gen_event callback, does nothing. -terminate(_Reason, #state{log = Logs}) -> +terminate(_Reason, #state{mWriteLog = Logs}) -> {ok, lists:reverse(Logs)}. diff --git a/src/utils/rumUtil.erl b/src/utils/rumUtil.erl index fe36f14..f00ddf6 100644 --- a/src/utils/rumUtil.erl +++ b/src/utils/rumUtil.erl @@ -15,7 +15,7 @@ , msToBinStr/0 , msToBinStr/1 , parse_rotation_date_spec/1 - , calculate_next_rotation/1 + , calcNextRotate/1 , validate_trace/1 , check_traces/4 , is_loggable/3 @@ -263,11 +263,10 @@ parse_rotation_date_spec([$$ | X]) when X /= [] -> parse_rotation_date_spec(_) -> {error, invalid_date_spec}. -calculate_next_rotation(Spec) -> - Now = calendar:local_time(), - Later = calculate_next_rotation(Spec, Now), - calendar:datetime_to_gregorian_seconds(Later) - - calendar:datetime_to_gregorian_seconds(Now). +calcNextRotate(Spec) -> + NowDataTime = erlang:localtime(), + Later = calculate_next_rotation(Spec, NowDataTime), + calendar:datetime_to_gregorian_seconds(Later) - calendar:datetime_to_gregorian_seconds(NowDataTime). calculate_next_rotation([], Now) -> Now; diff --git a/test/lager_slow_backend.erl b/test/lager_slow_backend.erl index 2129698..0a2f277 100644 --- a/test/lager_slow_backend.erl +++ b/test/lager_slow_backend.erl @@ -18,7 +18,7 @@ handle_call(get_loglevel, State) -> handle_call(_Request, State) -> {ok, ok, State}. -handle_event({log, _Message}, State) -> +handle_event({mWriteLog, _Message}, State) -> timer:sleep(State#state.delay), {ok, State}; handle_event(_Event, State) -> diff --git a/test/lager_test_backend.erl b/test/lager_test_backend.erl index 224b170..11dc7a6 100644 --- a/test/lager_test_backend.erl +++ b/test/lager_test_backend.erl @@ -96,7 +96,7 @@ handle_call(print_bad_state, State) -> handle_call(_Request, State) -> {ok, ok, State}. -handle_event({log, Msg}, +handle_event({mWriteLog, Msg}, #state{level = LogLevel, buffer = Buffer, ignored = Ignored} = State) -> case lager_util:is_loggable(Msg, LogLevel, ?MODULE) of true ->