From 31a5fc5b133ced8b17ef5caa0d3fe2dc7d0df431 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-S=C3=A9bastien=20P=C3=A9dron?= Date: Mon, 11 Jan 2016 16:14:43 +0100 Subject: [PATCH] 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. --- src/lager_file_backend.erl | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/lager_file_backend.erl b/src/lager_file_backend.erl index 1c18dc4..b49861e 100644 --- a/src/lager_file_backend.erl +++ b/src/lager_file_backend.erl @@ -178,16 +178,15 @@ handle_event(_Event, State) -> %% @private handle_info({rotate, File}, #state{name=File,count=Count,date=Date} = State) -> _ = lager_util:rotate_logfile(File, Count), + State1 = close_file(State), schedule_rotation(File, Date), - {ok, State}; + {ok, State1}; handle_info(_Info, State) -> {ok, State}. %% @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. %% @private @@ -401,6 +400,14 @@ schedule_rotation(Name, Date) -> erlang:send_after(lager_util:calculate_next_rotation(Date) * 1000, self(), {rotate, Name}), 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). get_loglevel_test() ->