Fixed #15603 -- Changed the traceback error e-mails not to use HTML by default. It's now configurable with an 'include_html' parameter to AdminEmailHandler. Thanks, kmtracey

git-svn-id: http://code.djangoproject.com/svn/django/trunk@15850 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Adrian Holovaty 2011-03-16 04:13:57 +00:00
parent 2ee7cfcf1c
commit 304a50d8ca
2 changed files with 33 additions and 4 deletions

View File

@ -48,7 +48,11 @@ if not logger.handlers:
logger.addHandler(NullHandler())
class AdminEmailHandler(logging.Handler):
"""An exception log handler that emails log entries to site admins
def __init__(self, include_html=False):
logging.Handler.__init__(self)
self.include_html = include_html
"""An exception log handler that e-mails log entries to site admins.
If the request is passed as the first argument to the log record,
request data will be provided in the
@ -88,6 +92,6 @@ class AdminEmailHandler(logging.Handler):
message = "%s\n\n%s" % (stack_trace, request_repr)
reporter = ExceptionReporter(request, is_email=True, *exc_info)
html_message = reporter.get_traceback_html()
html_message = self.include_html and reporter.get_traceback_html() or None
mail.mail_admins(subject, message, fail_silently=True,
html_message=html_message)

View File

@ -468,13 +468,38 @@ Handlers
Django provides one log handler in addition to those provided by the
Python logging module.
.. class:: AdminEmailHandler()
.. class:: AdminEmailHandler([include_html=False])
This handler sends an e-mail to the site admins for each log
message it receives.
If the log record contains a 'request' attribute, the full details
If the log record contains a ``request`` attribute, the full details
of the request will be included in the e-mail.
If the log record contains stack trace information, that stack
trace will be included in the e-mail.
The ``include_html`` argument of ``AdminEmailHandler`` is used to
control whether the traceback e-mail includes an HTML attachment
containing the full content of the debug Web page that would have been
produced if ``DEBUG`` were ``True``. To set this value in your
configuration, include it in the handler definition for
``django.utils.log.AdminEmailHandler``, like this::
'handlers': {
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'include_html': True,
}
},
Note that this HTML version of the e-mail contains a full traceback,
with names and values of local variables at each level of the stack, plus
the values of your Django settings. This information is potentially very
sensitive, and you may not want to send it over e-mail. Consider using
something such as `django-sentry`_ to get the best of both worlds -- the
rich information of full tracebacks plus the security of *not* sending the
information over e-mail.
.. _django-sentry: http://pypi.python.org/pypi/django-sentry