You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by rn...@apache.org on 2014/02/12 23:54:35 UTC
[1/2] couch commit: updated refs/heads/1843-feature-bigcouch to
de2160a
Updated Branches:
refs/heads/1843-feature-bigcouch 20a53ef58 -> de2160ac8
Remove _log
Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch/commit/4ee7c2d0
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch/tree/4ee7c2d0
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch/diff/4ee7c2d0
Branch: refs/heads/1843-feature-bigcouch
Commit: 4ee7c2d011f2f77676eb3ee17e7699333cdb174b
Parents: 20a53ef
Author: Robert Newson <ro...@cloudant.com>
Authored: Wed Feb 12 17:54:01 2014 +0000
Committer: Robert Newson <ro...@cloudant.com>
Committed: Wed Feb 12 20:31:03 2014 +0000
----------------------------------------------------------------------
src/couch.app.src | 3 +-
src/couch_httpd_misc_handlers.erl | 36 +----
src/couch_log.erl | 263 ---------------------------------
3 files changed, 2 insertions(+), 300 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb-couch/blob/4ee7c2d0/src/couch.app.src
----------------------------------------------------------------------
diff --git a/src/couch.app.src b/src/couch.app.src
index 39f6ee0..65b150f 100644
--- a/src/couch.app.src
+++ b/src/couch.app.src
@@ -18,7 +18,6 @@
couch_db_update_notifier_sup,
couch_external_manager,
couch_httpd,
- couch_log,
couch_primary_services,
couch_proc_manager,
couch_secondary_services,
@@ -30,5 +29,5 @@
]},
{mod, {couch_app, []}},
{applications, [kernel, stdlib, crypto, sasl, inets, oauth, ibrowse,
- mochiweb, ssl, twig]}
+ mochiweb, ssl, lager]}
]}.
http://git-wip-us.apache.org/repos/asf/couchdb-couch/blob/4ee7c2d0/src/couch_httpd_misc_handlers.erl
----------------------------------------------------------------------
diff --git a/src/couch_httpd_misc_handlers.erl b/src/couch_httpd_misc_handlers.erl
index 3b2bbeb..4cf16f6 100644
--- a/src/couch_httpd_misc_handlers.erl
+++ b/src/couch_httpd_misc_handlers.erl
@@ -14,7 +14,7 @@
-export([handle_welcome_req/2,handle_favicon_req/2,handle_utils_dir_req/2,
handle_all_dbs_req/1,handle_restart_req/1,
- handle_uuids_req/1,handle_config_req/1,handle_log_req/1,
+ handle_uuids_req/1,handle_config_req/1,
handle_task_status_req/1, handle_file_req/2]).
-export([increment_update_seq_req/2]).
@@ -270,37 +270,3 @@ increment_update_seq_req(#httpd{method='POST'}=Req, Db) ->
]});
increment_update_seq_req(Req, _Db) ->
send_method_not_allowed(Req, "POST").
-
-% httpd log handlers
-
-handle_log_req(#httpd{method='GET'}=Req) ->
- ok = couch_httpd:verify_is_server_admin(Req),
- Bytes = list_to_integer(couch_httpd:qs_value(Req, "bytes", "1000")),
- Offset = list_to_integer(couch_httpd:qs_value(Req, "offset", "0")),
- Chunk = couch_log:read(Bytes, Offset),
- {ok, Resp} = start_chunked_response(Req, 200, [
- % send a plaintext response
- {"Content-Type", "text/plain; charset=utf-8"},
- {"Content-Length", integer_to_list(length(Chunk))}
- ]),
- send_chunk(Resp, Chunk),
- last_chunk(Resp);
-handle_log_req(#httpd{method='POST'}=Req) ->
- {PostBody} = couch_httpd:json_body_obj(Req),
- Level = couch_util:get_value(<<"level">>, PostBody),
- Message = ?b2l(couch_util:get_value(<<"message">>, PostBody)),
- case Level of
- <<"debug">> ->
- ?LOG_DEBUG(Message, []),
- send_json(Req, 200, {[{ok, true}]});
- <<"info">> ->
- ?LOG_INFO(Message, []),
- send_json(Req, 200, {[{ok, true}]});
- <<"error">> ->
- ?LOG_ERROR(Message, []),
- send_json(Req, 200, {[{ok, true}]});
- _ ->
- send_json(Req, 400, {[{error, ?l2b(io_lib:format("Unrecognized log level '~s'", [Level]))}]})
- end;
-handle_log_req(Req) ->
- send_method_not_allowed(Req, "GET,POST").
http://git-wip-us.apache.org/repos/asf/couchdb-couch/blob/4ee7c2d0/src/couch_log.erl
----------------------------------------------------------------------
diff --git a/src/couch_log.erl b/src/couch_log.erl
deleted file mode 100644
index d1aa701..0000000
--- a/src/couch_log.erl
+++ /dev/null
@@ -1,263 +0,0 @@
-% Licensed under the Apache License, Version 2.0 (the "License"); you may not
-% use this file except in compliance with the License. You may obtain a copy of
-% the License at
-%
-% http://www.apache.org/licenses/LICENSE-2.0
-%
-% Unless required by applicable law or agreed to in writing, software
-% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-% License for the specific language governing permissions and limitations under
-% the License.
-
--module(couch_log).
--behaviour(gen_event).
--behaviour(config_listener).
-
-% public API
--export([start_link/0, stop/0]).
--export([debug/2, info/2, warn/2, error/2]).
--export([debug_on/0, info_on/0, warn_on/0, get_level/0, get_level_integer/0, set_level/1]).
--export([debug_on/1, info_on/1, warn_on/1, get_level/1, get_level_integer/1, set_level/2]).
--export([read/2]).
-
-% gen_event callbacks
--export([init/1, handle_event/2, terminate/2, code_change/3]).
--export([handle_info/2, handle_call/2]).
-
-% config_listener api
--export([handle_config_change/5]).
-
--define(LEVEL_ERROR, 4).
--define(LEVEL_WARN, 3).
--define(LEVEL_INFO, 2).
--define(LEVEL_DEBUG, 1).
-
--record(state, {
- fd,
- level,
- sasl
-}).
-
-debug(Format, Args) ->
- {ConsoleMsg, FileMsg} = get_log_messages(self(), debug, Format, Args),
- gen_event:sync_notify(error_logger, {couch_debug, ConsoleMsg, FileMsg}).
-
-info(Format, Args) ->
- {ConsoleMsg, FileMsg} = get_log_messages(self(), info, Format, Args),
- gen_event:sync_notify(error_logger, {couch_info, ConsoleMsg, FileMsg}).
-
-warn(Format, Args) ->
- {ConsoleMsg, FileMsg} = get_log_messages(self(), warn, Format, Args),
- gen_event:sync_notify(error_logger, {couch_warn, ConsoleMsg, FileMsg}).
-
-error(Format, Args) ->
- {ConsoleMsg, FileMsg} = get_log_messages(self(), error, Format, Args),
- gen_event:sync_notify(error_logger, {couch_error, ConsoleMsg, FileMsg}).
-
-
-level_integer(error) -> ?LEVEL_ERROR;
-level_integer(warn) -> ?LEVEL_WARN;
-level_integer(info) -> ?LEVEL_INFO;
-level_integer(debug) -> ?LEVEL_DEBUG;
-level_integer(_Else) -> ?LEVEL_ERROR. % anything else default to ERROR level
-
-level_atom(?LEVEL_ERROR) -> error;
-level_atom(?LEVEL_WARN) -> warn;
-level_atom(?LEVEL_INFO) -> info;
-level_atom(?LEVEL_DEBUG) -> debug.
-
-
-start_link() ->
- couch_event_sup:start_link({local, couch_log}, error_logger, couch_log, []).
-
-stop() ->
- couch_event_sup:stop(couch_log).
-
-init([]) ->
- ok = config:listen_for_changes(?MODULE, nil),
-
- Filename = config:get("log", "file", "couchdb.log"),
- Level = level_integer(list_to_atom(config:get("log", "level", "info"))),
- Sasl = config:get("log", "include_sasl", "true") =:= "true",
- LevelByModule = config:get("log_level_by_module"),
-
- case ets:info(?MODULE) of
- undefined -> ets:new(?MODULE, [named_table]);
- _ -> ok
- end,
- ets:insert(?MODULE, {level, Level}),
- lists:foreach(fun({Module, ModuleLevel}) ->
- ModuleLevelInteger = level_integer(list_to_atom(ModuleLevel)),
- ets:insert(?MODULE, {Module, ModuleLevelInteger})
- end, LevelByModule),
-
-
- case file:open(Filename, [append]) of
- {ok, Fd} ->
- {ok, #state{fd = Fd, level = Level, sasl = Sasl}};
- {error, Reason} ->
- ReasonStr = file:format_error(Reason),
- io:format("Error opening log file ~s: ~s", [Filename, ReasonStr]),
- {stop, {error, ReasonStr, Filename}}
- end.
-
-handle_config_change("log", "file", _, _, _) ->
- ?MODULE:stop(),
- remove_handler;
-handle_config_change("log", "level", _, _, _) ->
- ?MODULE:stop(),
- remove_handler;
-handle_config_change("log", "include_sasl", _, _, _) ->
- ?MODULE:stop(),
- remove_handler;
-handle_config_change(_, _, _, _, _) ->
- {ok, nil}.
-
-debug_on() ->
- get_level_integer() =< ?LEVEL_DEBUG.
-
-info_on() ->
- get_level_integer() =< ?LEVEL_INFO.
-
-warn_on() ->
- get_level_integer() =< ?LEVEL_WARN.
-
-debug_on(Module) ->
- get_level_integer(Module) =< ?LEVEL_DEBUG.
-
-info_on(Module) ->
- get_level_integer(Module) =< ?LEVEL_INFO.
-
-warn_on(Module) ->
- get_level_integer(Module) =< ?LEVEL_WARN.
-
-set_level(LevelAtom) ->
- set_level_integer(level_integer(LevelAtom)).
-
-set_level(Module, LevelAtom) ->
- set_level_integer(Module, level_integer(LevelAtom)).
-
-get_level() ->
- level_atom(get_level_integer()).
-
-get_level(Module) ->
- level_atom(get_level_integer(Module)).
-
-get_level_integer() ->
- try
- ets:lookup_element(?MODULE, level, 2)
- catch error:badarg ->
- ?LEVEL_ERROR
- end.
-
-get_level_integer(Module0) ->
- Module = atom_to_list(Module0),
- try
- [{_Module, Level}] = ets:lookup(?MODULE, Module),
- Level
- catch error:_ ->
- get_level_integer()
- end.
-
-set_level_integer(Int) ->
- gen_event:call(error_logger, couch_log, {set_level_integer, Int}).
-
-set_level_integer(Module, Int) ->
- gen_event:call(error_logger, couch_log, {set_level_integer, Module, Int}).
-
-handle_event({couch_error, ConMsg, FileMsg}, State) ->
- log(State, ConMsg, FileMsg),
- {ok, State};
-handle_event({couch_warn, ConMsg, FileMsg}, State) ->
- log(State, ConMsg, FileMsg),
- {ok, State};
-handle_event({couch_info, ConMsg, FileMsg}, State) ->
- log(State, ConMsg, FileMsg),
- {ok, State};
-handle_event({couch_debug, ConMsg, FileMsg}, State) ->
- 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]),
- 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),
- log(State, ConMsg, FileMsg),
- {ok, State};
-handle_event(_Event, State) ->
- {ok, State}.
-
-handle_call({set_level_integer, NewLevel}, State) ->
- ets:insert(?MODULE, {level, NewLevel}),
- {ok, ok, State#state{level = NewLevel}};
-
-handle_call({set_level_integer, Module, NewLevel}, State) ->
- ets:insert(?MODULE, {Module, NewLevel}),
- {ok, ok, State#state{level = NewLevel}}.
-
-handle_info({gen_event_EXIT, {config_listener, ?MODULE}, _Reason}, State) ->
- erlang:send_after(5000, self(), restart_config_listener),
- {ok, State};
-handle_info(restart_config_listener, State) ->
- ok = config:listen_for_changes(?MODULE, nil),
- {ok, State};
-handle_info(_Info, State) ->
- {ok, State}.
-
-code_change(_OldVsn, State, _Extra) ->
- {ok, State}.
-
-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(
- "[~s] [~p] " ++ Format ++ "~n", [Level, Pid | Args])),
- FileMsg = ["[", couch_util:rfc1123_date(), "] ", ConsoleMsg],
- {ConsoleMsg, iolist_to_binary(FileMsg)}.
-
-
-% Read Bytes bytes from the end of log file, jumping Offset bytes towards
-% the beginning of the file first.
-%
-% Log File FilePos
-% ----------
-% | | 10
-% | | 20
-% | | 30
-% | | 40
-% | | 50
-% | | 60
-% | | 70 -- Bytes = 20 --
-% | | 80 | Chunk
-% | | 90 -- Offset = 10 --
-% |__________| 100
-
-read(Bytes, Offset) ->
- LogFileName = config:get("log", "file"),
- LogFileSize = filelib:file_size(LogFileName),
- MaxChunkSize = list_to_integer(
- config:get("httpd", "log_max_chunk_size", "1000000")),
- case Bytes > MaxChunkSize of
- true ->
- throw({bad_request, "'bytes' cannot exceed " ++
- integer_to_list(MaxChunkSize)});
- false ->
- ok
- end,
-
- {ok, Fd} = file:open(LogFileName, [read]),
- Start = lists:max([LogFileSize - Bytes - Offset, 0]),
-
- % TODO: truncate chopped first line
- % TODO: make streaming
-
- {ok, Chunk} = file:pread(Fd, Start, Bytes),
- ok = file:close(Fd),
- Chunk.
[2/2] couch commit: updated refs/heads/1843-feature-bigcouch to
de2160a
Posted by rn...@apache.org.
Switch to couch_log
Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch/commit/de2160ac
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch/tree/de2160ac
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch/diff/de2160ac
Branch: refs/heads/1843-feature-bigcouch
Commit: de2160ac828ce7f479c290b58fe7baf05de1c281
Parents: 4ee7c2d
Author: Robert Newson <ro...@cloudant.com>
Authored: Wed Feb 12 20:11:16 2014 +0000
Committer: Robert Newson <ro...@cloudant.com>
Committed: Wed Feb 12 21:35:32 2014 +0000
----------------------------------------------------------------------
include/couch_db.hrl | 8 ++++----
src/couch_file.erl | 2 +-
src/couch_sup.erl | 7 +++----
3 files changed, 8 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb-couch/blob/de2160ac/include/couch_db.hrl
----------------------------------------------------------------------
diff --git a/include/couch_db.hrl b/include/couch_db.hrl
index 2c015df..e1deeb2 100644
--- a/include/couch_db.hrl
+++ b/include/couch_db.hrl
@@ -35,10 +35,10 @@
-define(DEFAULT_ATTACHMENT_CONTENT_TYPE, <<"application/octet-stream">>).
--define(LOG_DEBUG(Format, Args), twig:log(debug, Format, Args)).
--define(LOG_INFO(Format, Args), twig:log(info, Format, Args)).
--define(LOG_WARN(Format, Args), twig:log(warn, Format, Args)).
--define(LOG_ERROR(Format, Args), twig:log(error, Format, Args)).
+-define(LOG_DEBUG(Format, Args), couch_log:log(debug, Format, Args)).
+-define(LOG_INFO(Format, Args), couch_log:log(info, Format, Args)).
+-define(LOG_WARN(Format, Args), couch_log:log(warn, Format, Args)).
+-define(LOG_ERROR(Format, Args), couch_log:log(error, Format, Args)).
% Tree::term() is really a tree(), but we don't want to require R13B04 yet
-type branch() :: {Key::term(), Value::term(), Tree::term()}.
http://git-wip-us.apache.org/repos/asf/couchdb-couch/blob/de2160ac/src/couch_file.erl
----------------------------------------------------------------------
diff --git a/src/couch_file.erl b/src/couch_file.erl
index 7528091..f7b10d0 100644
--- a/src/couch_file.erl
+++ b/src/couch_file.erl
@@ -167,7 +167,7 @@ pread_iolist(Fd, Pos) ->
Md5 ->
{ok, IoList};
_ ->
- twig:log(emerg, "File corruption in ~p at position ~B",
+ couch_log:log(emerg, "File corruption in ~p at position ~B",
[Fd, Pos]),
exit({file_corruption, <<"file corruption">>})
end;
http://git-wip-us.apache.org/repos/asf/couchdb-couch/blob/de2160ac/src/couch_sup.erl
----------------------------------------------------------------------
diff --git a/src/couch_sup.erl b/src/couch_sup.erl
index 3508d4f..c716620 100644
--- a/src/couch_sup.erl
+++ b/src/couch_sup.erl
@@ -43,7 +43,7 @@ start_link() ->
init(_Args) ->
- twig:log(info, "Starting ~s", [?MODULE]),
+ couch_log:log(info, "Starting ~s", [?MODULE]),
{ok, {{one_for_one,10, 60}, [
{
couch_primary_services,
@@ -77,9 +77,8 @@ handle_config_change(_, _, _, _, _) ->
notify_starting() ->
- io:format("Apache CouchDB ~s (LogLevel=~s) is starting.~n", [
- couch_server:get_version(),
- config:get("log", "level", "info")
+ io:format("Apache CouchDB ~s is starting.~n", [
+ couch_server:get_version()
]).