utils: include exception logging in log_http_request (#55516)

This commit is contained in:
Valentin Deniaud 2021-07-20 12:15:44 +02:00
parent e98fdad43f
commit f6aafa93c3
2 changed files with 17 additions and 1 deletions

View File

@ -188,6 +188,7 @@ def log_http_request(logger, request, response=None, exception=None, error_log=T
log_function = logger.info
message = ''
extra = extra or {}
kwargs = {}
if request is not None:
message = '%s %s' % (request.method, request.url)
@ -222,11 +223,12 @@ def log_http_request(logger, request, response=None, exception=None, error_log=T
message = repr(exception)
extra['response_exception'] = repr(exception)
log_function = logger.error
kwargs['exc_info'] = exception
# allow resources to disable any error log at requests level
if not error_log:
log_function = logger.info
log_function(message, extra=extra)
log_function(message, extra=extra, **kwargs)
# Wrapper around requests.Session

View File

@ -5,6 +5,7 @@ import itertools
import logging
import pytest
import requests
import utils
from django.core.exceptions import ValidationError
from django.utils.log import AdminEmailHandler
@ -381,3 +382,16 @@ def test_logged_requests_and_responses_max_size(app, db, monkeypatch, settings):
assert ResourceLog.objects.all()[1].extra.get('response_content') == '\'{"service_reply_var": "33\''
else:
assert ResourceLog.objects.all()[1].extra.get('response_content') == 'b\'{"service_reply_var": "33\''
def test_proxy_logger_email_traceback(app, db, email_handler, settings, mailoutbox, connector, monkeypatch):
settings.ADMINS = [('admin', 'admin@example.net')]
endpoint_url = utils.generic_endpoint_url('feeds', 'json', slug=connector.slug)
@endpoint()
def json(self, request):
raise requests.ConnectionError('timeout')
monkeypatch.setattr(Feed, 'json', json)
resp = app.get(endpoint_url, status=500)
assert any('Traceback:' in mail.body for mail in mailoutbox)