diff --git a/elasticsearch/connection/base.py b/elasticsearch/connection/base.py index 3a962c9b..bc50f5f1 100644 --- a/elasticsearch/connection/base.py +++ b/elasticsearch/connection/base.py @@ -77,6 +77,9 @@ class Connection(object): def log_request_fail(self, method, full_url, body, duration, status_code=None, response=None, exception=None): """ Log an unsuccessful API call. """ + # do not log 404s on HEAD requests + if method == 'HEAD' and status_code == 404: + return logger.warning( '%s %s [status:%s request:%.3fs]', method, full_url, status_code or 'N/A', duration, exc_info=exception is not None diff --git a/test_elasticsearch/test_connection.py b/test_elasticsearch/test_connection.py index 9900c4ae..db3cd53e 100644 --- a/test_elasticsearch/test_connection.py +++ b/test_elasticsearch/test_connection.py @@ -126,6 +126,12 @@ class TestRequestsConnection(TestCase): con = self._get_mock_connection(status_code=400) self.assertRaises(RequestError, con.perform_request, 'GET', '/', {}, '') + @patch('elasticsearch.connection.base.logger') + def test_head_with_404_doesnt_get_logged(self, logger): + con = self._get_mock_connection(status_code=404) + self.assertRaises(NotFoundError, con.perform_request, 'HEAD', '/', {}, '') + self.assertEquals(0, logger.warning.call_count) + @patch('elasticsearch.connection.base.tracer') @patch('elasticsearch.connection.base.logger') def test_failed_request_logs_and_traces(self, logger, tracer):