diff options
author | Hubert Plociniczak <hubert@lshift.net> | 2008-11-28 12:57:03 +0000 |
---|---|---|
committer | Hubert Plociniczak <hubert@lshift.net> | 2008-11-28 12:57:03 +0000 |
commit | aeb78210e273a65ad62630c76ffa75c047e87fec (patch) | |
tree | 22c211a345b283942bfe50f095a8afb866135874 | |
parent | b03225948fa01e0e9b8ece91956d3fd967b06356 (diff) | |
download | rabbitmq-server-aeb78210e273a65ad62630c76ffa75c047e87fec.tar.gz |
Logging handlers attempt to create the directory
to the log file if it doesn't exist yet.
Added new test to include the case when no write
permissions are set for the directory.
-rw-r--r-- | src/rabbit_error_logger_file_h.erl | 4 | ||||
-rw-r--r-- | src/rabbit_misc.erl | 10 | ||||
-rw-r--r-- | src/rabbit_sasl_report_file_h.erl | 4 | ||||
-rw-r--r-- | src/rabbit_tests.erl | 38 |
4 files changed, 44 insertions, 12 deletions
diff --git a/src/rabbit_error_logger_file_h.erl b/src/rabbit_error_logger_file_h.erl index d67b02ef..c3bdd520 100644 --- a/src/rabbit_error_logger_file_h.erl +++ b/src/rabbit_error_logger_file_h.erl @@ -53,9 +53,11 @@ init({{File, _}, error}) -> %% log rotation init({File, []}) -> init(File); -init({_File, _Type} = FileInfo) -> +init({File, _Type} = FileInfo) -> + rabbit_misc:ensure_directory_exists(File), error_logger_file_h:init(FileInfo); init(File) -> + rabbit_misc:ensure_directory_exists(File), error_logger_file_h:init(File). handle_event(Event, State) -> diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index c1c643d3..02f519bd 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -42,7 +42,7 @@ -export([intersperse/2, upmap/2, map_in_order/2]). -export([guid/0, string_guid/1, binstring_guid/1]). -export([dirty_read_all/1, dirty_foreach_key/2, dirty_dump_log/1]). --export([append_file/2]). +-export([append_file/2, ensure_directory_exists/1]). -import(mnesia). -import(lists). @@ -98,6 +98,7 @@ 'ok' | 'aborted'). -spec(dirty_dump_log/1 :: (string()) -> 'ok' | {'error', any()}). -spec(append_file/2 :: (string(), string()) -> 'ok' | {'error', any()}). +-spec(ensure_directory_exists/1 :: (string()) -> 'ok'). -endif. @@ -369,3 +370,10 @@ append_file(File, _, Suffix) -> {ok, Data} -> file:write_file([File, Suffix], Data, [append]); Error -> Error end. + +ensure_directory_exists(Filename) -> + case filelib:ensure_dir(Filename) of + ok -> ok; + {error, Reason} -> + throw({error, {cannot_create_directory, Filename, Reason}}) + end. diff --git a/src/rabbit_sasl_report_file_h.erl b/src/rabbit_sasl_report_file_h.erl index 10e2ee6e..0c5a29f0 100644 --- a/src/rabbit_sasl_report_file_h.erl +++ b/src/rabbit_sasl_report_file_h.erl @@ -54,9 +54,11 @@ init({{File, _}, error}) -> %% doing any log rotation init({File, []}) -> init(File); -init({_File, _Type} = FileInfo) -> +init({File, _Type} = FileInfo) -> + rabbit_misc:ensure_directory_exists(File), sasl_report_file_h:init(FileInfo); init(File) -> + rabbit_misc:ensure_directory_exists(File), sasl_report_file_h:init({File, sasl_error_logger_type()}). handle_event(Event, State) -> diff --git a/src/rabbit_tests.erl b/src/rabbit_tests.erl index db78bbcc..7c7136b9 100644 --- a/src/rabbit_tests.erl +++ b/src/rabbit_tests.erl @@ -236,25 +236,37 @@ test_log_management_during_startup() -> ok = error_logger:tty(false), ok = delete_log_handlers([sasl_report_tty_h]), ok = case catch control_action(start_app, []) of - ok -> exit(got_success_but_expected_failure); - {error, {cannot_log_to_tty, _, _}} -> ok - end, + ok -> exit(got_success_but_expected_failure); + {error, {cannot_log_to_tty, _, _}} -> ok + end, %% fix sasl logging ok = application:set_env(sasl, sasl_error_logger, {file, SaslLog}), - %% start application with logging to invalid directory + %% start application with logging to non-existing directory TmpLog = "/tmp/rabbit-tests/test.log", - file:delete(TmpLog), + delete_file(TmpLog), ok = application:set_env(kernel, error_logger, {file, TmpLog}), ok = delete_log_handlers([rabbit_error_logger_file_h]), ok = add_log_handlers([{error_logger_file_h, MainLog}]), - ok = case catch control_action(start_app, []) of - ok -> exit(got_success_but_expected_failure); - {error, {cannot_log_to_file, _, _}} -> ok - end, + ok = control_action(start_app, []), + + %% start application with logging to directory with no + %% write permissions + TmpDir = "/tmp/rabbit-tests", + ok = set_permissions(TmpDir, 8#00400), + ok = delete_log_handlers([rabbit_error_logger_file_h]), + ok = add_log_handlers([{error_logger_file_h, MainLog}]), + ok = case control_action(start_app, []) of + ok -> exit(got_success_but_expected_failure); + {error, {cannot_log_to_file, _, _}} -> ok + end, + ok = set_permissions(TmpDir, 8#00400 + 8#00200 + 8#00100), + ok = set_permissions(TmpLog, 8#00400 + 8#00200), + ok = delete_file(TmpLog), + ok = file:del_dir(TmpDir), %% start application with standard error_logger_file_h %% handler not installed @@ -494,6 +506,14 @@ test_logs_working(MainLogFile, SaslLogFile) -> [true, true] = non_empty_files([MainLogFile, SaslLogFile]), ok. +set_permissions(Path, Mode) -> + case file:read_file_info(Path) of + {ok, FInfo} -> file:write_file_info( + Path, + FInfo#file_info{mode=Mode}); + Error -> Error + end. + clean_logs(Files, Suffix) -> [begin ok = delete_file(File), |