diff options
author | Samir Shah <solaris.smoke@gmail.com> | 2017-07-13 07:09:18 +0300 |
---|---|---|
committer | Tim Graham <timograham@gmail.com> | 2018-05-04 20:55:03 -0400 |
commit | 10b44e45256ddda4258ae032b8d4725a3e3284e6 (patch) | |
tree | de7c8b159c5104d3da1a2b51a946d35404be07d6 /django/core/handlers/exception.py | |
parent | 2e1f674897e89bbc69a389696773aebfec601916 (diff) | |
download | django-10b44e45256ddda4258ae032b8d4725a3e3284e6.tar.gz |
Fixed #26688 -- Fixed HTTP request logging inconsistencies.
* Added logging of 500 responses for instantiated responses.
* Added logging of all 4xx and 5xx responses.
Diffstat (limited to 'django/core/handlers/exception.py')
-rw-r--r-- | django/core/handlers/exception.py | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/django/core/handlers/exception.py b/django/core/handlers/exception.py index e98bec262a..3fe6e4d3dd 100644 --- a/django/core/handlers/exception.py +++ b/django/core/handlers/exception.py @@ -11,10 +11,9 @@ from django.core.exceptions import ( from django.http import Http404 from django.http.multipartparser import MultiPartParserError from django.urls import get_resolver, get_urlconf +from django.utils.log import log_response from django.views import debug -logger = logging.getLogger('django.request') - def convert_exception_to_response(get_response): """ @@ -47,18 +46,22 @@ def response_for_exception(request, exc): response = get_exception_response(request, get_resolver(get_urlconf()), 404, exc) elif isinstance(exc, PermissionDenied): - logger.warning( + response = get_exception_response(request, get_resolver(get_urlconf()), 403, exc) + log_response( 'Forbidden (Permission denied): %s', request.path, - extra={'status_code': 403, 'request': request}, + response=response, + request=request, + exc_info=sys.exc_info(), ) - response = get_exception_response(request, get_resolver(get_urlconf()), 403, exc) elif isinstance(exc, MultiPartParserError): - logger.warning( + response = get_exception_response(request, get_resolver(get_urlconf()), 400, exc) + log_response( 'Bad request (Unable to parse request body): %s', request.path, - extra={'status_code': 400, 'request': request}, + response=response, + request=request, + exc_info=sys.exc_info(), ) - response = get_exception_response(request, get_resolver(get_urlconf()), 400, exc) elif isinstance(exc, SuspiciousOperation): if isinstance(exc, (RequestDataTooBig, TooManyFieldsSent)): @@ -85,6 +88,12 @@ def response_for_exception(request, exc): else: signals.got_request_exception.send(sender=None, request=request) response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info()) + log_response( + '%s: %s', response.reason_phrase, request.path, + response=response, + request=request, + exc_info=sys.exc_info(), + ) # Force a TemplateResponse to be rendered. if not getattr(response, 'is_rendered', True) and callable(getattr(response, 'render', None)): @@ -112,12 +121,6 @@ def handle_uncaught_exception(request, resolver, exc_info): if settings.DEBUG_PROPAGATE_EXCEPTIONS: raise - logger.error( - 'Internal Server Error: %s', request.path, - exc_info=exc_info, - extra={'status_code': 500, 'request': request}, - ) - if settings.DEBUG: return debug.technical_500_response(request, *exc_info) |