summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHubert Plociniczak <hubert@lshift.net>2008-08-19 15:26:11 +0100
committerHubert Plociniczak <hubert@lshift.net>2008-08-19 15:26:11 +0100
commitf68deec1639ff31ee8ceac62bcb0093f99b276a6 (patch)
tree1b4d033391836ac0be0e6ae730b14688884ffb74 /src
parentad27fd9268b0efb0674e71b2d99cbc12cbcb162f (diff)
parentd6a2ba61a838b604fad47286afa097d136095635 (diff)
downloadrabbitmq-server-git-f68deec1639ff31ee8ceac62bcb0093f99b276a6.tar.gz
Merge bug19200 into bug19193
Diffstat (limited to 'src')
-rw-r--r--src/rabbit.erl66
-rw-r--r--src/rabbit_control.erl13
2 files changed, 55 insertions, 24 deletions
diff --git a/src/rabbit.erl b/src/rabbit.erl
index 69f72bfd55..3de403789b 100644
--- a/src/rabbit.erl
+++ b/src/rabbit.erl
@@ -27,7 +27,7 @@
-behaviour(application).
--export([start/0, stop/0, stop_and_halt/0, status/0, reopen_logs/0]).
+-export([start/0, stop/0, stop_and_halt/0, status/0, reopen_logs/0, reopen_logs/1]).
-export([start/2, stop/1]).
@@ -39,6 +39,7 @@
-include("rabbit_framing.hrl").
-include("rabbit.hrl").
+-include_lib("kernel/include/file.hrl").
-define(APPS, [os_mon, mnesia, rabbit]).
@@ -50,6 +51,7 @@
-spec(stop/0 :: () -> 'ok').
-spec(stop_and_halt/0 :: () -> 'ok').
-spec(reopen_logs/0 :: () -> 'ok').
+-spec(reopen_logs/1 :: name() -> 'ok' | {'error', 'cannot_append_logfile'}).
-spec(status/0 :: () ->
[{running_applications, [{atom(), string(), string()}]} |
{nodes, [node()]} |
@@ -87,8 +89,15 @@ status() ->
rabbit_mnesia:status().
reopen_logs() ->
- ok = reopen_main_logs(),
- ok = reopen_sasl_logs().
+ ok = reopen_logs(error_log_location(), [], main_log),
+ ok = reopen_logs(sasl_log_location(), [], sasl_log).
+
+reopen_logs(Suffix) ->
+ LSuffix = binary_to_list(Suffix),
+ case reopen_logs(error_log_location(), LSuffix, main_log) of
+ ok -> reopen_logs(sasl_log_location(), LSuffix, sasl_log);
+ Error -> Error
+ end.
%%--------------------------------------------------------------------
@@ -266,22 +275,41 @@ sasl_log_location() ->
_ -> undefined
end.
-reopen_main_logs() ->
- case error_log_location() of
- tty -> ok;
- File -> error_logger:swap_handler({logfile, File})
+reopen_logs(File, Suffix,Swap) ->
+ case File of
+ undefined -> ok;
+ tty -> ok;
+ _ -> case append_to_log_file(File, Suffix) of
+ omit -> swap_handler(Swap, File);
+ ok -> swap_handler(Swap, File);
+ Error -> Error
+ end
end.
-reopen_sasl_logs() ->
- try
- case sasl_log_location() of
- undefined -> ok;
- tty -> ok;
- {file, File} -> gen_event:swap_handler(error_logger,
- {sasl_error_logger, swap},
- {sasl_report_file_h, File});
- _ -> ok
- end
- catch
- _ -> ok
+swap_handler(main_log, File) ->
+ error_logger:swap_handler({logfile, File}),
+ error_logger:delete_report_handler(error_logger_file_h),
+ ok;
+swap_handler(sasl_log, File ) ->
+ gen_event:swap_handler(error_logger,
+ {error_logger, swap},
+ {sasl_report_file_h, File}),
+ gen_event:add_handler(error_logger, error_logger, []),
+ error_logger:delete_report_handler(sasl_report_file_h),
+ ok.
+
+append_to_log_file(File, Suffix) ->
+ case file:read_file_info(File) of
+ {ok, FInfo} -> append_file(File, FInfo#file_info.size, Suffix);
+ {error, _} -> ok
+ end.
+
+append_file(_, 0, _) ->
+ omit;
+append_file(_, _, []) ->
+ omit;
+append_file(File, _, Suffix) ->
+ case file:read_file(File) of
+ {ok, Data} -> file:write_file([File, Suffix], Data, [append]);
+ {error, _} -> {error, cannot_append_logfile}
end.
diff --git a/src/rabbit_control.erl b/src/rabbit_control.erl
index 999e5fdd08..4c1b92bbf2 100644
--- a/src/rabbit_control.erl
+++ b/src/rabbit_control.erl
@@ -73,7 +73,7 @@ Available commands:
force_reset
cluster <ClusterNode> ...
status
- reopen_logs
+ reopen_logs [Suffix]
add_user <UserName> <Password>
delete_user <UserName>
@@ -114,10 +114,6 @@ action(reset, Node, []) ->
io:format("Resetting node ~p ...", [Node]),
call(Node, {rabbit_mnesia, reset, []});
-action(reopen_logs, Node, []) ->
- io:format("Reopening logs for node ~p ...", [Node]),
- call(Node, {rabbit, reopen_logs, []});
-
action(force_reset, Node, []) ->
io:format("Forcefully resetting node ~p ...", [Node]),
call(Node, {rabbit_mnesia, force_reset, []});
@@ -134,6 +130,13 @@ action(status, Node, []) ->
io:format("~n~p~n", [Res]),
ok;
+action(reopen_logs, Node, []) ->
+ io:format("Reopening logs for node ~p ...", [Node]),
+ call(Node, {rabbit, reopen_logs, []});
+action(reopen_logs, Node, Args = [Suffix]) ->
+ io:format("Moving logs to files with suffix ~p and reopening logs ...", [Suffix]),
+ call(Node, {rabbit, reopen_logs, Args});
+
action(add_user, Node, Args = [Username, _Password]) ->
io:format("Creating user ~p ...", [Username]),
call(Node, {rabbit_access_control, add_user, Args});