summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexandru Scvortov <alexandru@rabbitmq.com>2011-09-05 11:08:18 +0100
committerAlexandru Scvortov <alexandru@rabbitmq.com>2011-09-05 11:08:18 +0100
commit6ce64948d8302636dd862413ee32f0c824e76f55 (patch)
tree657a0455a761743765b509102dbf5283301ac822 /src
parentcb0dca4a5ba6439970e240fb6994db635c6ac858 (diff)
parent463fcc538a4b74af6d9a1342e6a1724315cb5298 (diff)
downloadrabbitmq-server-git-6ce64948d8302636dd862413ee32f0c824e76f55.tar.gz
merge default into bug24332
Diffstat (limited to 'src')
-rw-r--r--src/rabbit.erl13
-rw-r--r--src/rabbit_error_logger_file_h.erl18
-rw-r--r--src/rabbit_sasl_report_file_h.erl16
-rw-r--r--src/rabbit_tests.erl44
4 files changed, 50 insertions, 41 deletions
diff --git a/src/rabbit.erl b/src/rabbit.erl
index b8dbccc767..fa8e169340 100644
--- a/src/rabbit.erl
+++ b/src/rabbit.erl
@@ -464,6 +464,11 @@ ensure_working_log_handlers() ->
sasl_report_tty_h,
log_location(sasl),
Handlers),
+ case log_location(kernel) of
+ tty -> ok;
+ undefined -> ok;
+ _ -> error_logger:delete_report_handler(error_logger_tty_h)
+ end,
ok.
ensure_working_log_handler(OldFHandler, NewFHandler, TTYHandler,
@@ -489,10 +494,10 @@ ensure_working_log_handler(OldFHandler, NewFHandler, TTYHandler,
end.
log_location(Type) ->
- case application:get_env(Type, case Type of
- kernel -> error_logger;
- sasl -> sasl_error_logger
- end) of
+ case application:get_env(rabbit, case Type of
+ kernel -> error_logger;
+ sasl -> sasl_error_logger
+ end) of
{ok, {file, File}} -> File;
{ok, false} -> undefined;
{ok, tty} -> tty;
diff --git a/src/rabbit_error_logger_file_h.erl b/src/rabbit_error_logger_file_h.erl
index 7e9ebc4fa2..519aac10ad 100644
--- a/src/rabbit_error_logger_file_h.erl
+++ b/src/rabbit_error_logger_file_h.erl
@@ -30,7 +30,8 @@
%% Used only when swapping handlers in log rotation
init({{File, Suffix}, []}) ->
case rabbit_misc:append_file(File, Suffix) of
- ok -> ok;
+ ok -> file:delete(File),
+ ok;
{error, Error} ->
rabbit_log:error("Failed to append contents of "
"log file '~s' to '~s':~n~p~n",
@@ -45,12 +46,21 @@ init({{File, _}, error}) ->
%% log rotation
init({File, []}) ->
init(File);
-init({File, _Type} = FileInfo) ->
+init({File, {error_logger, []}}) ->
rabbit_misc:ensure_parent_dirs_exist(File),
- error_logger_file_h:init(FileInfo);
+ init_file(File, error_logger);
init(File) ->
rabbit_misc:ensure_parent_dirs_exist(File),
- error_logger_file_h:init(File).
+ init_file(File, []).
+
+init_file(File, PrevHandler) ->
+ process_flag(trap_exit, true),
+ case file:open(File, [append]) of
+ {ok,Fd} ->
+ {ok, {Fd, File, PrevHandler}};
+ Error ->
+ Error
+ end.
handle_event(Event, State) ->
error_logger_file_h:handle_event(Event, State).
diff --git a/src/rabbit_sasl_report_file_h.erl b/src/rabbit_sasl_report_file_h.erl
index 6f3c5c75bc..d45ed3d33d 100644
--- a/src/rabbit_sasl_report_file_h.erl
+++ b/src/rabbit_sasl_report_file_h.erl
@@ -31,7 +31,8 @@
%% log rotation
init({{File, Suffix}, []}) ->
case rabbit_misc:append_file(File, Suffix) of
- ok -> ok;
+ ok -> file:delete(File),
+ ok;
{error, Error} ->
rabbit_log:error("Failed to append contents of "
"sasl log file '~s' to '~s':~n~p~n",
@@ -48,10 +49,19 @@ init({File, []}) ->
init(File);
init({File, _Type} = FileInfo) ->
rabbit_misc:ensure_parent_dirs_exist(File),
- sasl_report_file_h:init(FileInfo);
+ init_file(FileInfo);
init(File) ->
rabbit_misc:ensure_parent_dirs_exist(File),
- sasl_report_file_h:init({File, sasl_error_logger_type()}).
+ init_file({File, sasl_error_logger_type()}).
+
+init_file({File, Type}) ->
+ process_flag(trap_exit, true),
+ case file:open(File, [append]) of
+ {ok,Fd} ->
+ {ok, {Fd, File, Type}};
+ What ->
+ What
+ end.
handle_event(Event, State) ->
sasl_report_file_h:handle_event(Event, State).
diff --git a/src/rabbit_tests.erl b/src/rabbit_tests.erl
index cd5d9be0cc..60a755545e 100644
--- a/src/rabbit_tests.erl
+++ b/src/rabbit_tests.erl
@@ -801,47 +801,32 @@ test_log_management() ->
ok = control_action(rotate_logs, [Suffix]),
[true, true] = empty_files([[MainLog, Suffix], [SaslLog, Suffix]]),
- %% original main log file is not writable
- ok = make_files_non_writable([MainLog]),
- {error, {cannot_rotate_main_logs, _}} = control_action(rotate_logs, []),
- ok = clean_logs([MainLog], Suffix),
- ok = add_log_handlers([{rabbit_error_logger_file_h, MainLog}]),
-
- %% original sasl log file is not writable
- ok = make_files_non_writable([SaslLog]),
- {error, {cannot_rotate_sasl_logs, _}} = control_action(rotate_logs, []),
- ok = clean_logs([SaslLog], Suffix),
- ok = add_log_handlers([{rabbit_sasl_report_file_h, SaslLog}]),
-
%% logs with suffix are not writable
ok = control_action(rotate_logs, [Suffix]),
ok = make_files_non_writable([[MainLog, Suffix], [SaslLog, Suffix]]),
ok = control_action(rotate_logs, [Suffix]),
ok = test_logs_working(MainLog, SaslLog),
- %% original log files are not writable
+ %% rotate when original log files are not writable
ok = make_files_non_writable([MainLog, SaslLog]),
- {error, {{cannot_rotate_main_logs, _},
- {cannot_rotate_sasl_logs, _}}} = control_action(rotate_logs, []),
+ ok = control_action(rotate_logs, []),
%% logging directed to tty (handlers were removed in last test)
ok = clean_logs([MainLog, SaslLog], Suffix),
- ok = application:set_env(sasl, sasl_error_logger, tty),
- ok = application:set_env(kernel, error_logger, tty),
+ ok = application:set_env(rabbit, sasl_error_logger, tty),
+ ok = application:set_env(rabbit, error_logger, tty),
ok = control_action(rotate_logs, []),
[{error, enoent}, {error, enoent}] = empty_files([MainLog, SaslLog]),
%% rotate logs when logging is turned off
- ok = application:set_env(sasl, sasl_error_logger, false),
- ok = application:set_env(kernel, error_logger, silent),
+ ok = application:set_env(rabbit, sasl_error_logger, false),
+ ok = application:set_env(rabbit, error_logger, silent),
ok = control_action(rotate_logs, []),
[{error, enoent}, {error, enoent}] = empty_files([MainLog, SaslLog]),
%% cleanup
- ok = application:set_env(sasl, sasl_error_logger, {file, SaslLog}),
- ok = application:set_env(kernel, error_logger, {file, MainLog}),
- ok = add_log_handlers([{rabbit_error_logger_file_h, MainLog},
- {rabbit_sasl_report_file_h, SaslLog}]),
+ ok = application:set_env(rabbit, sasl_error_logger, {file, SaslLog}),
+ ok = application:set_env(rabbit, error_logger, {file, MainLog}),
passed.
test_log_management_during_startup() ->
@@ -850,8 +835,8 @@ test_log_management_during_startup() ->
%% start application with simple tty logging
ok = control_action(stop_app, []),
- ok = application:set_env(kernel, error_logger, tty),
- ok = application:set_env(sasl, sasl_error_logger, tty),
+ ok = application:set_env(rabbit, error_logger, tty),
+ ok = application:set_env(rabbit, sasl_error_logger, tty),
ok = add_log_handlers([{error_logger_tty_h, []},
{sasl_report_tty_h, []}]),
ok = control_action(start_app, []),
@@ -868,13 +853,12 @@ test_log_management_during_startup() ->
end,
%% fix sasl logging
- ok = application:set_env(sasl, sasl_error_logger,
- {file, SaslLog}),
+ ok = application:set_env(rabbit, sasl_error_logger, {file, SaslLog}),
%% start application with logging to non-existing directory
TmpLog = "/tmp/rabbit-tests/test.log",
delete_file(TmpLog),
- ok = application:set_env(kernel, error_logger, {file, TmpLog}),
+ ok = application:set_env(rabbit, error_logger, {file, TmpLog}),
ok = delete_log_handlers([rabbit_error_logger_file_h]),
ok = add_log_handlers([{error_logger_file_h, MainLog}]),
@@ -895,7 +879,7 @@ test_log_management_during_startup() ->
%% start application with logging to a subdirectory which
%% parent directory has no write permissions
TmpTestDir = "/tmp/rabbit-tests/no-permission/test/log",
- ok = application:set_env(kernel, error_logger, {file, TmpTestDir}),
+ ok = application:set_env(rabbit, error_logger, {file, TmpTestDir}),
ok = add_log_handlers([{error_logger_file_h, MainLog}]),
ok = case control_action(start_app, []) of
ok -> exit({got_success_but_expected_failure,
@@ -910,7 +894,7 @@ test_log_management_during_startup() ->
%% start application with standard error_logger_file_h
%% handler not installed
- ok = application:set_env(kernel, error_logger, {file, MainLog}),
+ ok = application:set_env(rabbit, error_logger, {file, MainLog}),
ok = control_action(start_app, []),
ok = control_action(stop_app, []),