Apply patch from django ticket #101863, to provide more debugging information in production error notification emails.

- Legacy-Id: 2469
This commit is contained in:
Henrik Levkowetz 2010-08-12 13:06:42 +00:00
parent 2d50e7df8f
commit fa45244ef2
3 changed files with 58 additions and 5 deletions

View file

@ -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)

View file

@ -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."""

View 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."""