From c5c98dcaac0636b375d8fa5972f614925b026e05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Honza=20Kr=C3=A1l?= Date: Tue, 3 Dec 2013 01:55:32 +0100 Subject: [PATCH] Add logging of body as INFO on connection error --- elasticsearch/connection/base.py | 3 ++- elasticsearch/connection/http_requests.py | 4 ++-- elasticsearch/connection/http_urllib3.py | 4 ++-- elasticsearch/connection/memcached.py | 4 ++-- elasticsearch/connection/thrift.py | 4 ++-- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/elasticsearch/connection/base.py b/elasticsearch/connection/base.py index 40c487e5..ad453a57 100644 --- a/elasticsearch/connection/base.py +++ b/elasticsearch/connection/base.py @@ -61,12 +61,13 @@ class Connection(object): if tracer.isEnabledFor(logging.DEBUG): tracer.debug('#[%s] (%.3fs)\n#%s', status_code, duration, _pretty_json(response).replace('\n', '\n#') if response else '') - def log_request_fail(self, method, full_url, duration, status_code=None, exception=None): + def log_request_fail(self, method, full_url, body, duration, status_code=None, exception=None): """ Log an unsuccessful API call. """ logger.warning( '%s %s [status:%s request:%.3fs]', method, full_url, status_code or 'N/A', duration, exc_info=exception is not None ) + logger.info('> %s', body) def _raise_error(self, status_code, raw_data): """ Locate appropriate exception and raise it. """ diff --git a/elasticsearch/connection/http_requests.py b/elasticsearch/connection/http_requests.py index f7a223dd..7993c998 100644 --- a/elasticsearch/connection/http_requests.py +++ b/elasticsearch/connection/http_requests.py @@ -48,12 +48,12 @@ class RequestsHttpConnection(Connection): duration = time.time() - start raw_data = response.text except (requests.ConnectionError, requests.Timeout) as e: - self.log_request_fail(method, url, time.time() - start, exception=e) + self.log_request_fail(method, url, body, time.time() - start, exception=e) raise ConnectionError('N/A', str(e), e) # raise errors based on http status codes, let the client handle those if needed if not (200 <= response.status_code < 300) and response.status_code not in ignore: - self.log_request_fail(method, url, duration, response.status_code) + self.log_request_fail(method, url, body, duration, response.status_code) self._raise_error(response.status_code, raw_data) self.log_request_success(method, url, response.request.path_url, body, response.status_code, raw_data, duration) diff --git a/elasticsearch/connection/http_urllib3.py b/elasticsearch/connection/http_urllib3.py index 1bed8205..4a245c2b 100644 --- a/elasticsearch/connection/http_urllib3.py +++ b/elasticsearch/connection/http_urllib3.py @@ -47,11 +47,11 @@ class Urllib3HttpConnection(Connection): duration = time.time() - start raw_data = response.data.decode('utf-8') except Exception as e: - self.log_request_fail(method, full_url, time.time() - start, exception=e) + self.log_request_fail(method, full_url, body, time.time() - start, exception=e) raise ConnectionError('N/A', str(e), e) if not (200 <= response.status < 300) and response.status not in ignore: - self.log_request_fail(method, url, duration, response.status) + self.log_request_fail(method, url, body, duration, response.status) self._raise_error(response.status, raw_data) self.log_request_success(method, full_url, url, body, response.status, diff --git a/elasticsearch/connection/memcached.py b/elasticsearch/connection/memcached.py index f11e6481..ac6289b1 100644 --- a/elasticsearch/connection/memcached.py +++ b/elasticsearch/connection/memcached.py @@ -57,7 +57,7 @@ class MemcachedConnection(PoolingConnection): if response: response = response.decode('utf-8') except Exception as e: - self.log_request_fail(method, full_url, time.time() - start, exception=e) + self.log_request_fail(method, full_url, body, time.time() - start, exception=e) raise ConnectionError('N/A', str(e), e) finally: self._release_connection(mc) @@ -71,7 +71,7 @@ class MemcachedConnection(PoolingConnection): raise TransportError('N/A', data['error']) if not (200 <= status < 300) and status not in ignore: - self.log_request_fail(method, url, duration, status) + self.log_request_fail(method, url, body, duration, status) self._raise_error(status, response) self.log_request_success(method, full_url, url, body, status, diff --git a/elasticsearch/connection/thrift.py b/elasticsearch/connection/thrift.py index f695a80d..627105b1 100644 --- a/elasticsearch/connection/thrift.py +++ b/elasticsearch/connection/thrift.py @@ -61,13 +61,13 @@ class ThriftConnection(PoolingConnection): response = tclient.execute(request) duration = time.time() - start except TException as e: - self.log_request_fail(method, url, time.time() - start, exception=e) + self.log_request_fail(method, url, body, time.time() - start, exception=e) raise ConnectionError('N/A', str(e), e) finally: self._release_connection(tclient) if not (200 <= response.status < 300) and response.status not in ignore: - self.log_request_fail(method, url, duration, response.status) + self.log_request_fail(method, url, body, duration, response.status) self._raise_error(response.status, response.body) self.log_request_success(method, url, url, body, response.status,