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 | b1dab3afd0b26c35dbdea409719a88b116b245c5 (patch) | |
| tree | 22c211a345b283942bfe50f095a8afb866135874 | |
| parent | 15b7fc9d54934863baba663b5aacbf84660c3c0b (diff) | |
| download | rabbitmq-server-git-b1dab3afd0b26c35dbdea409719a88b116b245c5.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 d67b02ef42..c3bdd5201d 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 c1c643d3a4..02f519bd4c 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 10e2ee6eb9..0c5a29f02b 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 db78bbcc50..7c7136b905 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), |
