瀏覽代碼

lager_file_backend: Close file after time-based rotation

Before, the old file was still being used until the next
`check_interval`, where the file was recreated and reopened.
pull/312/head
Jean-Sébastien Pédron 9 年之前
父節點
當前提交
31a5fc5b13
共有 1 個文件被更改,包括 12 次插入5 次删除
  1. +12
    -5
      src/lager_file_backend.erl

+ 12
- 5
src/lager_file_backend.erl 查看文件

@ -178,16 +178,15 @@ handle_event(_Event, State) ->
%% @private %% @private
handle_info({rotate, File}, #state{name=File,count=Count,date=Date} = State) -> handle_info({rotate, File}, #state{name=File,count=Count,date=Date} = State) ->
_ = lager_util:rotate_logfile(File, Count), _ = lager_util:rotate_logfile(File, Count),
State1 = close_file(State),
schedule_rotation(File, Date), schedule_rotation(File, Date),
{ok, State};
{ok, State1};
handle_info(_Info, State) -> handle_info(_Info, State) ->
{ok, State}. {ok, State}.
%% @private %% @private
terminate(_Reason, #state{fd=FD}) ->
%% flush and close any file handles
_ = file:datasync(FD),
_ = file:close(FD),
terminate(_Reason, State) ->
close_file(State),
ok. ok.
%% @private %% @private
@ -401,6 +400,14 @@ schedule_rotation(Name, Date) ->
erlang:send_after(lager_util:calculate_next_rotation(Date) * 1000, self(), {rotate, Name}), erlang:send_after(lager_util:calculate_next_rotation(Date) * 1000, self(), {rotate, Name}),
ok. ok.
close_file(#state{fd=undefined} = State) ->
State;
close_file(#state{fd=FD} = State) ->
%% Flush and close any file handles.
_ = file:datasync(FD),
_ = file:close(FD),
State#state{fd=undefined}.
-ifdef(TEST). -ifdef(TEST).
get_loglevel_test() -> get_loglevel_test() ->

Loading…
取消
儲存