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/08/01 11:06:10 UTC
[34/49] chttpd commit: updated refs/heads/windsor-merge to 554ef74
Improve logging of errors with traces
Project: http://git-wip-us.apache.org/repos/asf/couchdb-chttpd/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-chttpd/commit/50ccf293
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-chttpd/tree/50ccf293
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-chttpd/diff/50ccf293
Branch: refs/heads/windsor-merge
Commit: 50ccf2932b9072fefd24111c3b6fb7d54038a8cd
Parents: f4b0fdc
Author: Robert Newson <ro...@cloudant.com>
Authored: Tue Dec 10 00:44:04 2013 +0000
Committer: Robert Newson <rn...@apache.org>
Committed: Thu Jul 31 11:54:27 2014 +0100
----------------------------------------------------------------------
src/chttpd.erl | 23 ++++++++++++++---------
1 file changed, 14 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb-chttpd/blob/50ccf293/src/chttpd.erl
----------------------------------------------------------------------
diff --git a/src/chttpd.erl b/src/chttpd.erl
index 93b56f0..372a61d 100644
--- a/src/chttpd.erl
+++ b/src/chttpd.erl
@@ -642,7 +642,7 @@ send_delayed_error(#delayed_resp{req=Req,resp=nil}=DelayedResp, Reason) ->
{ok, Resp} = send_error(Req, Code, ErrorStr, ReasonStr),
{ok, DelayedResp#delayed_resp{resp=Resp}};
send_delayed_error(#delayed_resp{resp=Resp}, Reason) ->
- log_stack_trace(json_stack(Reason)),
+ log_error_with_stack_trace(Reason),
throw({http_abort, Resp, Reason}).
end_delayed_json_response(#delayed_resp{}=DelayedResp) ->
@@ -813,11 +813,11 @@ send_error(Req, Code, Headers, ErrorStr, ReasonStr, []) ->
{[{<<"error">>, ErrorStr},
{<<"reason">>, ReasonStr}]});
send_error(Req, Code, Headers, ErrorStr, ReasonStr, Stack) ->
- log_stack_trace(Stack),
+ log_error_with_stack_trace({ErrorStr, ReasonStr, Stack}),
send_json(Req, Code, [stack_trace_id(Stack) | Headers],
{[{<<"error">>, ErrorStr},
- {<<"reason">>, ReasonStr},
- {<<"ref">>, stack_hash(Stack)}
+ {<<"reason">>, ReasonStr} |
+ case Stack of [] -> []; _ -> [{<<"ref">>, stack_hash(Stack)}] end
]}).
% give the option for list functions to output html or other raw errors
@@ -827,12 +827,12 @@ send_chunked_error(Resp, {_Error, {[{<<"body">>, Reason}]}}) ->
send_chunked_error(Resp, Error) ->
Stack = json_stack(Error),
- log_stack_trace(Stack),
+ log_error_with_stack_trace(Error),
{Code, ErrorStr, ReasonStr} = error_info(Error),
JsonError = {[{<<"code">>, Code},
{<<"error">>, ErrorStr},
- {<<"reason">>, ReasonStr},
- {<<"ref">>, stack_hash(Stack)}
+ {<<"reason">>, ReasonStr} |
+ case Stack of [] -> []; _ -> [{<<"ref">>, stack_hash(Stack)}] end
]},
send_chunk(Resp, ?l2b([$\n,?JSON_ENCODE(JsonError),$\n])),
send_chunk(Resp, []).
@@ -890,8 +890,13 @@ maybe_decompress(Httpd, Body) ->
throw({bad_ctype, [Else, " is not a supported content encoding."]})
end.
-log_stack_trace(Stack) ->
- couch_log:error("~p failed with trace: ~p", [stack_hash(Stack), Stack]).
+log_error_with_stack_trace({bad_request, _, _}) ->
+ ok;
+log_error_with_stack_trace({Error, Reason, Stack}) ->
+ couch_log:error("ref: ~p req_err ~p:~p ~p",
+ [stack_hash(Stack), Error, Reason, Stack]);
+log_error_with_stack_trace(_) ->
+ ok.
stack_trace_id(Stack) ->
{"X-Cloudant-Stack-Hash", stack_hash(Stack)}.