Apply patch from django ticket #101863, to provide more debugging information in production error notification emails.
- Legacy-Id: 2469
This commit is contained in:
parent
2d50e7df8f
commit
fa45244ef2
|
@ -154,13 +154,17 @@ class BaseHandler(object):
|
|||
return debug.technical_500_response(request, *exc_info)
|
||||
|
||||
# When DEBUG is False, send an error message to the admins.
|
||||
from django.views.debug import ExceptionReporter
|
||||
reporter = ExceptionReporter(request, *exc_info)
|
||||
html = reporter.get_traceback_html()
|
||||
|
||||
subject = 'Error (%s IP): %s' % ((request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS and 'internal' or 'EXTERNAL'), request.path)
|
||||
try:
|
||||
request_repr = repr(request)
|
||||
except:
|
||||
request_repr = "Request repr() unavailable"
|
||||
message = "%s\n\n%s" % (self._get_traceback(exc_info), request_repr)
|
||||
mail_admins(subject, message, fail_silently=True)
|
||||
mail_admins(subject, message, fail_silently=True, html_message=html)
|
||||
# Return an HttpResponse that displays a friendly error message.
|
||||
callback, param_dict = resolver.resolve500()
|
||||
return callback(request, **param_dict)
|
||||
|
|
|
@ -409,13 +409,15 @@ def send_mass_mail(datatuple, fail_silently=False, auth_user=None,
|
|||
for subject, message, sender, recipient in datatuple]
|
||||
return connection.send_messages(messages)
|
||||
|
||||
def mail_admins(subject, message, fail_silently=False):
|
||||
def mail_admins(subject, message, fail_silently=False, html_message=None):
|
||||
"""Sends a message to the admins, as defined by the ADMINS setting."""
|
||||
if not settings.ADMINS:
|
||||
return
|
||||
EmailMessage(settings.EMAIL_SUBJECT_PREFIX + subject, message,
|
||||
settings.SERVER_EMAIL, [a[1] for a in settings.ADMINS]
|
||||
).send(fail_silently=fail_silently)
|
||||
from django.core.mail import EmailMultiAlternatives
|
||||
msg = EmailMultiAlternatives(settings.EMAIL_SUBJECT_PREFIX + subject, message, settings.SERVER_EMAIL, [a[1] for a in settings.ADMINS])
|
||||
if html_message:
|
||||
msg.attach_alternative(html_message, "text/html")
|
||||
msg.send(fail_silently=fail_silently)
|
||||
|
||||
def mail_managers(subject, message, fail_silently=False):
|
||||
"""Sends a message to the managers, as defined by the MANAGERS setting."""
|
||||
|
|
47
django/django-ticket-10863-full-error-email.patch
Normal file
47
django/django-ticket-10863-full-error-email.patch
Normal file
|
@ -0,0 +1,47 @@
|
|||
Index: /Users/boxed/django/django/core/handlers/base.py
|
||||
===================================================================
|
||||
--- /Users/boxed/django/django/core/handlers/base.py (revision 10581)
|
||||
+++ /Users/boxed/django/django/core/handlers/base.py (working copy)
|
||||
@@ -154,13 +154,17 @@
|
||||
return debug.technical_500_response(request, *exc_info)
|
||||
|
||||
# When DEBUG is False, send an error message to the admins.
|
||||
+ from django.views.debug import ExceptionReporter
|
||||
+ reporter = ExceptionReporter(request, *exc_info)
|
||||
+ html = reporter.get_traceback_html()
|
||||
+
|
||||
subject = 'Error (%s IP): %s' % ((request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS and 'internal' or 'EXTERNAL'), request.path)
|
||||
try:
|
||||
request_repr = repr(request)
|
||||
except:
|
||||
request_repr = "Request repr() unavailable"
|
||||
message = "%s\n\n%s" % (self._get_traceback(exc_info), request_repr)
|
||||
- mail_admins(subject, message, fail_silently=True)
|
||||
+ mail_admins(subject, message, fail_silently=True, html_message=html)
|
||||
# Return an HttpResponse that displays a friendly error message.
|
||||
callback, param_dict = resolver.resolve500()
|
||||
return callback(request, **param_dict)
|
||||
Index: /Users/boxed/django/django/core/mail.py
|
||||
===================================================================
|
||||
--- /Users/boxed/django/django/core/mail.py (revision 10581)
|
||||
+++ /Users/boxed/django/django/core/mail.py (working copy)
|
||||
@@ -368,13 +368,15 @@
|
||||
for subject, message, sender, recipient in datatuple]
|
||||
return connection.send_messages(messages)
|
||||
|
||||
-def mail_admins(subject, message, fail_silently=False):
|
||||
+def mail_admins(subject, message, fail_silently=False, html_message=None):
|
||||
"""Sends a message to the admins, as defined by the ADMINS setting."""
|
||||
if not settings.ADMINS:
|
||||
return
|
||||
- EmailMessage(settings.EMAIL_SUBJECT_PREFIX + subject, message,
|
||||
- settings.SERVER_EMAIL, [a[1] for a in settings.ADMINS]
|
||||
- ).send(fail_silently=fail_silently)
|
||||
+ from django.core.mail import EmailMultiAlternatives
|
||||
+ msg = EmailMultiAlternatives(settings.EMAIL_SUBJECT_PREFIX + subject, message, settings.SERVER_EMAIL, [a[1] for a in settings.ADMINS])
|
||||
+ if html_message:
|
||||
+ msg.attach_alternative(html_message, "text/html")
|
||||
+ msg.send(fail_silently=fail_silently)
|
||||
|
||||
def mail_managers(subject, message, fail_silently=False):
|
||||
"""Sends a message to the managers, as defined by the MANAGERS setting."""
|
Loading…
Reference in a new issue