aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMickaël Rémond <mickael.remond@process-one.net>2006-03-04 17:33:23 +0000
committerMickaël Rémond <mickael.remond@process-one.net>2006-03-04 17:33:23 +0000
commit804c32c1001a971b50553eaf7861c28b47b56278 (patch)
tree6ecd67889f0f885ab240db0bbee9974a33781385 /src
parent* src/web/ejabberd_web_admin.erl: Added a interface for node (diff)
* src/ejabberd_logger_h.erl: reopen-log function now rename the log
file if it has not been already renamed by a logrotate process. This change allow ejabberd administrators to rotate log files on Windows (EJAB-52). SVN Revision: 514
Diffstat (limited to 'src')
-rw-r--r--src/ejabberd_logger_h.erl15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/ejabberd_logger_h.erl b/src/ejabberd_logger_h.erl
index 462f408d4..975a9b25f 100644
--- a/src/ejabberd_logger_h.erl
+++ b/src/ejabberd_logger_h.erl
@@ -66,6 +66,7 @@ handle_info({'EXIT', _Fd, _Reason}, _State) ->
remove_handler;
handle_info({emulator, _GL, reopen}, State) ->
file:close(State#state.fd),
+ rotate_log(State#state.file),
case file:open(State#state.file, [append, raw]) of
{ok, Fd} ->
{ok, State#state{fd = Fd}};
@@ -189,3 +190,17 @@ write_time({{Y,Mo,D},{H,Mi,S}}, Type) ->
io_lib:format("~n=~s==== ~w-~.2.0w-~.2.0w ~.2.0w:~.2.0w:~.2.0w ===~n",
[Type, Y, Mo, D, H, Mi, S]).
+%% Rename the log file if it the filename exists
+%% This is needed in systems when the file must be closed before rotation (Windows).
+%% On most Unix-like system, the file can be renamed from the command line and
+%%the log can directly be reopened.
+rotate_log(Filename) ->
+ case file:read_file_info(Filename) of
+ {ok, _FileInfo} ->
+ RotationName = filename:rootname(Filename),
+ file:rename(Filename, [RotationName, "-old.log"]),
+ ok;
+ {error, _Reason} ->
+ ok
+ end.
+