diff options
| author | Hubert Plociniczak <hubert@lshift.net> | 2008-09-02 11:46:52 +0100 |
|---|---|---|
| committer | Hubert Plociniczak <hubert@lshift.net> | 2008-09-02 11:46:52 +0100 |
| commit | e0055b94793630dddd99a7dac88a385ee6dc4064 (patch) | |
| tree | 46cec21aded580d46560162b857db7f9fa54cab2 /src/rabbit.erl | |
| parent | fb9a469f65be1f10af4b9d1efcb610ca935856ee (diff) | |
| download | rabbitmq-server-git-e0055b94793630dddd99a7dac88a385ee6dc4064.tar.gz | |
Added test suite for log rotation.
Initialise log rotation in its own phase.
Diffstat (limited to 'src/rabbit.erl')
| -rw-r--r-- | src/rabbit.erl | 107 |
1 files changed, 52 insertions, 55 deletions
diff --git a/src/rabbit.erl b/src/rabbit.erl index edcea1f712..1af550a341 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -31,6 +31,8 @@ -export([start/2, stop/1]). +-export([error_log_location/1, sasl_log_location/0]). + -import(application). -import(mnesia). -import(lists). @@ -46,6 +48,8 @@ -ifdef(use_specs). +-type(log_location() :: 'tty' | 'undefined' | string()). + -spec(start/0 :: () -> 'ok'). -spec(stop/0 :: () -> 'ok'). -spec(stop_and_halt/0 :: () -> 'ok'). @@ -54,6 +58,8 @@ [{running_applications, [{atom(), string(), string()}]} | {nodes, [node()]} | {running_nodes, [node()]}]). +-spec(error_log_location/1 :: ('default' | 'wrapper') -> log_location()). +-spec(sasl_log_location/0 :: () -> log_location()). -endif. @@ -61,7 +67,6 @@ start() -> try - ok = ensure_working_log_config(), ok = rabbit_mnesia:ensure_mnesia_dir(), ok = start_applications(?APPS) after @@ -143,7 +148,9 @@ start(normal, []) -> apply(M, F, A), io:format("done~n") end, - [{"database", + [{"log configuration", + fun () -> ok = maybe_swap_log_handlers() end}, + {"database", fun () -> ok = rabbit_mnesia:init() end}, {"core processes", fun () -> @@ -172,15 +179,7 @@ start(normal, []) -> {ok, DefaultVHost} = application:get_env(default_vhost), ok = error_logger:add_report_handler( rabbit_error_logger, [DefaultVHost]), - ok = start_builtin_amq_applications(), - %% Swap default handlers with rabbit wrappers - %% to simplify the swapping of log handlers later - ok = rotate_logs(error_log_location(default), "", - error_logger_file_h, - rabbit_error_logger_file_h), - ok = rotate_logs(sasl_log_location(), "", - sasl_report_file_h, - rabbit_sasl_report_file_h) + ok = start_builtin_amq_applications() end}, {"TCP listeners", fun () -> @@ -204,6 +203,29 @@ stop(_State) -> %--------------------------------------------------------------------------- +error_log_location(Type) -> + case case Type of + default -> error_logger:logfile(filename); + wrapper -> gen_event:call(error_logger, + rabbit_error_logger_file_h, + filename) + end of + {error, no_log_file} -> tty; + {error, _} -> undefined; + File -> File + end. + +sasl_log_location() -> + case application:get_env(sasl, sasl_error_logger) of + {ok, {file, File}} -> File; + {ok, false} -> undefined; + {ok, tty} -> tty; + {ok, Bad} -> throw({error, {cannot_log_to_file, Bad}}); + _ -> undefined + end. + +%--------------------------------------------------------------------------- + print_banner() -> {ok, Product} = application:get_key(id), {ok, Version} = application:get_key(vsn), @@ -220,6 +242,25 @@ start_child(Mod) -> transient, 100, worker, [Mod]}), ok. +maybe_swap_log_handlers() -> + Handlers = gen_event:which_handlers(error_logger), + ok = maybe_swap_log_handlers(error_logger_file_h, + rabbit_error_logger_file_h, + error_log_location(default), + Handlers), + ok = maybe_swap_log_handlers(sasl_report_file_h, + rabbit_sasl_report_file_h, + sasl_log_location(), + Handlers), + ok. + +maybe_swap_log_handlers(Old, New, LogLocation, Handlers) -> + case lists:member(Old, Handlers) + and not(lists:member(New, Handlers)) of + true -> rotate_logs(LogLocation, "", Old, New); + false -> ok + end. + maybe_insert_default_data() -> case rabbit_mnesia:is_db_empty() of true -> insert_default_data(); @@ -241,50 +282,6 @@ start_builtin_amq_applications() -> %%restart ok. -ensure_working_log_config() -> - case error_logger:logfile(filename) of - {error, no_log_file} -> - %% either no log file was configured or opening it failed. - case application:get_env(kernel, error_logger) of - {ok, {file, Filename}} -> - case filelib:ensure_dir(Filename) of - ok -> ok; - {error, Reason1} -> - throw({error, {cannot_log_to_file, - Filename, Reason1}}) - end, - case error_logger:logfile({open, Filename}) of - ok -> ok; - {error, Reason2} -> - throw({error, {cannot_log_to_file, - Filename, Reason2}}) - end; - _ -> ok - end; - _Filename -> ok - end. - -error_log_location(Type) -> - case case Type of - default -> error_logger:logfile(filename); - wrapper -> gen_event:call(error_logger, - rabbit_error_logger_file_h, - filename) - end of - {error, no_log_file} -> tty; - {error, _} -> undefined; - File -> File - end. - -sasl_log_location() -> - case application:get_env(sasl, sasl_error_logger) of - {ok, {file, File}} -> File; - {ok, false} -> undefined; - {ok, tty} -> tty; - {ok, Bad} -> throw({error, {cannot_log_to_file, Bad}}); - _ -> undefined - end. - rotate_logs(File, Suffix, Handler) -> rotate_logs(File, Suffix, Handler, Handler). |
