diff options
author | Robert Newson <rnewson@apache.org> | 2012-01-17 14:26:01 +0000 |
---|---|---|
committer | Robert Newson <rnewson@apache.org> | 2012-01-17 14:46:23 +0000 |
commit | 6228b178543429732c17b3a784c957d3782573b9 (patch) | |
tree | a2f91ac8cc9e60c79a2240b0fa9be540a0c236fc | |
parent | ef368d7c07b9f734ce3fdcdae2979a7c325dd78b (diff) | |
download | couchdb-6228b178543429732c17b3a784c957d3782573b9.tar.gz |
COUCHDB-1380 Revert "Better logger performance"
This reverts commit 9f2398faef3936a844caffbaf3eef8675383ccfd which
switched couch_log to use disk_log. Unfortunately that module performs
positioned writes which prevents the usual logrotation strategy from
working correctly.
-rw-r--r-- | src/couchdb/couch_log.erl | 56 | ||||
-rwxr-xr-x | test/etap/172-os-daemon-errors.t | 1 |
2 files changed, 23 insertions, 34 deletions
diff --git a/src/couchdb/couch_log.erl b/src/couchdb/couch_log.erl index 1b05f4db6..8e24cab5e 100644 --- a/src/couchdb/couch_log.erl +++ b/src/couchdb/couch_log.erl @@ -27,29 +27,23 @@ -define(LEVEL_INFO, 2). -define(LEVEL_DEBUG, 1). --define(DISK_LOGGER, couch_disk_logger). - -record(state, { + fd, level, sasl }). debug(Format, Args) -> {ConsoleMsg, FileMsg} = get_log_messages(self(), debug, Format, Args), - ok = disk_log:balog(?DISK_LOGGER, FileMsg), - gen_event:sync_notify(error_logger, {couch_debug, ConsoleMsg}). + gen_event:sync_notify(error_logger, {couch_debug, ConsoleMsg, FileMsg}). info(Format, Args) -> {ConsoleMsg, FileMsg} = get_log_messages(self(), info, Format, Args), - ok = disk_log:balog(?DISK_LOGGER, FileMsg), - gen_event:sync_notify(error_logger, {couch_info, ConsoleMsg}). + gen_event:sync_notify(error_logger, {couch_info, ConsoleMsg, FileMsg}). error(Format, Args) -> {ConsoleMsg, FileMsg} = get_log_messages(self(), error, Format, Args), - % Synchronous logging for error messages only. We want to reduce the - % chances of missing any if server is killed. - ok = disk_log:blog(?DISK_LOGGER, FileMsg), - gen_event:sync_notify(error_logger, {couch_error, ConsoleMsg}). + gen_event:sync_notify(error_logger, {couch_error, ConsoleMsg, FileMsg}). level_integer(error) -> ?LEVEL_ERROR; @@ -92,13 +86,11 @@ init([]) -> end, ets:insert(?MODULE, {level, Level}), - DiskLogOptions = [ - {file, Filename}, {name, ?DISK_LOGGER}, - {format, external}, {type, halt}, {notify, true} - ], - case disk_log:open(DiskLogOptions) of - {ok, ?DISK_LOGGER} -> - {ok, #state{level = Level, sasl = Sasl}}; + case file:open(Filename, [append]) of + {ok, Fd} -> + {ok, #state{fd = Fd, level = Level, sasl = Sasl}}; + {error, eacces} -> + {stop, {file_permission_error, Filename}}; Error -> {stop, Error} end. @@ -125,26 +117,24 @@ get_level_integer() -> set_level_integer(Int) -> gen_event:call(error_logger, couch_log, {set_level_integer, Int}). -handle_event({couch_error, ConMsg}, State) -> - ok = io:put_chars(ConMsg), +handle_event({couch_error, ConMsg, FileMsg}, State) -> + log(State, ConMsg, FileMsg), {ok, State}; -handle_event({couch_info, ConMsg}, #state{level = LogLevel} = State) +handle_event({couch_info, ConMsg, FileMsg}, #state{level = LogLevel} = State) when LogLevel =< ?LEVEL_INFO -> - ok = io:put_chars(ConMsg), + log(State, ConMsg, FileMsg), {ok, State}; -handle_event({couch_debug, ConMsg}, #state{level = LogLevel} = State) +handle_event({couch_debug, ConMsg, FileMsg}, #state{level = LogLevel} = State) when LogLevel =< ?LEVEL_DEBUG -> - ok = io:put_chars(ConMsg), + log(State, ConMsg, FileMsg), {ok, State}; handle_event({error_report, _, {Pid, _, _}}=Event, #state{sasl = true} = St) -> {ConMsg, FileMsg} = get_log_messages(Pid, error, "~p", [Event]), - ok = disk_log:blog(?DISK_LOGGER, FileMsg), - ok = io:put_chars(ConMsg), + log(St, ConMsg, FileMsg), {ok, St}; handle_event({error, _, {Pid, Format, Args}}, #state{sasl = true} = State) -> {ConMsg, FileMsg} = get_log_messages(Pid, error, Format, Args), - ok = disk_log:blog(?DISK_LOGGER, FileMsg), - ok = io:put_chars(ConMsg), + log(State, ConMsg, FileMsg), {ok, State}; handle_event(_Event, State) -> {ok, State}. @@ -153,18 +143,18 @@ handle_call({set_level_integer, NewLevel}, State) -> ets:insert(?MODULE, {level, NewLevel}), {ok, ok, State#state{level = NewLevel}}. -handle_info({disk_log, _Node, _Log, {error_status, Status}}, _State) -> - io:format("Disk logger error: ~p~n", [Status]), - % couch_event_sup will restart us. - remove_handler; handle_info(_Info, State) -> {ok, State}. code_change(_OldVsn, State, _Extra) -> {ok, State}. -terminate(_Arg, _State) -> - ok = disk_log:close(?DISK_LOGGER). +terminate(_Arg, #state{fd = Fd}) -> + file:close(Fd). + +log(#state{fd = Fd}, ConsoleMsg, FileMsg) -> + ok = io:put_chars(ConsoleMsg), + ok = io:put_chars(Fd, FileMsg). get_log_messages(Pid, Level, Format, Args) -> ConsoleMsg = unicode:characters_to_binary(io_lib:format( diff --git a/test/etap/172-os-daemon-errors.t b/test/etap/172-os-daemon-errors.t index 39bdfee00..bde5c6ffb 100755 --- a/test/etap/172-os-daemon-errors.t +++ b/test/etap/172-os-daemon-errors.t @@ -56,7 +56,6 @@ main(_) -> test() -> couch_config:start_link(config_files()), - couch_log:start_link(), couch_os_daemons:start_link(), etap:diag("Daemon not executable."), |