summaryrefslogtreecommitdiff
path: root/django/core/handlers/exception.py
diff options
context:
space:
mode:
authorSamir Shah <solaris.smoke@gmail.com>2017-07-13 07:09:18 +0300
committerTim Graham <timograham@gmail.com>2018-05-04 20:55:03 -0400
commit10b44e45256ddda4258ae032b8d4725a3e3284e6 (patch)
treede7c8b159c5104d3da1a2b51a946d35404be07d6 /django/core/handlers/exception.py
parent2e1f674897e89bbc69a389696773aebfec601916 (diff)
downloaddjango-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.py31
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)