summaryrefslogtreecommitdiff
path: root/src/rabbit_error_logger_file_h.erl
diff options
context:
space:
mode:
authorAlexandru Scvortov <alexandru@rabbitmq.com>2011-08-11 18:34:07 +0100
committerAlexandru Scvortov <alexandru@rabbitmq.com>2011-08-11 18:34:07 +0100
commit1e30805fa9114690f1f159f83eff1f84e5d89b9e (patch)
treeea608198e2430f131fd4af03b3653c6d3cb21823 /src/rabbit_error_logger_file_h.erl
parentf5ce49652d4e5c143e356969e9b7bc9e665e617d (diff)
downloadrabbitmq-server-1e30805fa9114690f1f159f83eff1f84e5d89b9e.tar.gz
only allow the rabbit error logger to touch the files and append rather than overwrite
If the standard error logger is initialised with the correct file names, the files will be overwritten. So, we no longer tell Erlang the location of the files at boot. It will automatically register an error_logger_tty_h, which we then unregister after setting up our own loggers (you can't swap a file logger for a tty logger). Still left todo: - error loggers when stopping rabbit, - windows rabbitmq-server.bat, - the other head of ensure_working_log_handlers, - it doesn't really make sense to swap out the non exitent error_logger_file_h.
Diffstat (limited to 'src/rabbit_error_logger_file_h.erl')
-rw-r--r--src/rabbit_error_logger_file_h.erl15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/rabbit_error_logger_file_h.erl b/src/rabbit_error_logger_file_h.erl
index 7e9ebc4f..dacd0de4 100644
--- a/src/rabbit_error_logger_file_h.erl
+++ b/src/rabbit_error_logger_file_h.erl
@@ -45,12 +45,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_handler);
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).