Parcourir la source

ft: 代码修改调整

master
SisMaker il y a 4 ans
Parent
révision
f9203dc012
13 fichiers modifiés avec 68 ajouts et 78 suppressions
  1. +1
    -4
      include/eRum.hrl
  2. +1
    -1
      src/backend/rumBackendConsole.erl
  3. +9
    -9
      src/backend/rumBackendFile.erl
  4. +1
    -1
      src/backend/rumBackendThrottle.erl
  5. +33
    -39
      src/crashLog/rumCrashLog.erl
  6. +4
    -4
      src/eRum.erl
  7. +2
    -2
      src/eRum_app.erl
  8. +2
    -2
      src/errLogger/rumErrLoggerH.erl
  9. +1
    -1
      src/mgrKiller/rumMgrKiller.erl
  10. +7
    -7
      src/test/lager_common_test_backend.erl
  11. +5
    -6
      src/utils/rumUtil.erl
  12. +1
    -1
      test/lager_slow_backend.erl
  13. +1
    -1
      test/lager_test_backend.erl

+ 1
- 4
include/eRum.hrl Voir le fichier

@ -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).

+ 1
- 1
src/backend/rumBackendConsole.erl Voir le fichier

@ -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 ->

+ 9
- 9
src/backend/rumBackendFile.erl Voir le fichier

@ -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},

+ 1
- 1
src/backend/rumBackendThrottle.erl Voir le fichier

@ -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} ->

+ 33
- 39
src/crashLog/rumCrashLog.erl Voir le fichier

@ -33,72 +33,66 @@
-record(state, {
fileName :: string(), %%
fd :: pid() | undefined, %%
inode :: integer() | undefined,
ctime :: file:date_time() | undefined, %%
fmtmaxbytes :: integer() class="p">, %%
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"],

+ 4
- 4
src/eRum.erl Voir le fichier

@ -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) ->

+ 2
- 2
src/eRum_app.erl Voir le fichier

@ -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.

+ 2
- 2
src/errLogger/rumErrLoggerH.erl Voir le fichier

@ -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) ->

+ 1
- 1
src/mgrKiller/rumMgrKiller.erl Voir le fichier

@ -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 ->

+ 7
- 7
src/test/lager_common_test_backend.erl Voir le fichier

@ -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)}.

+ 5
- 6
src/utils/rumUtil.erl Voir le fichier

@ -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;

+ 1
- 1
test/lager_slow_backend.erl Voir le fichier

@ -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) ->

+ 1
- 1
test/lager_test_backend.erl Voir le fichier

@ -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 ->

Chargement…
Annuler
Enregistrer