Browse files

Fixed #15603 -- Changed the traceback error e-mails not to use HTML b…

…y default. It's now configurable with an 'include_html' parameter to AdminEmailHandler. Thanks, kmtracey

git-svn-id: bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
adrianholovaty committed Mar 16, 2011
1 parent 2ee7cfc commit 304a50d8cac1d185685d212867a2d449c5378e9e
Showing with 33 additions and 4 deletions.
  1. +6 −2 django/utils/
  2. +27 −2 docs/topics/logging.txt
@@ -48,7 +48,11 @@ def getLogger(name=None):
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 @@ def emit(self, record):
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,
@@ -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:

0 comments on commit 304a50d

Please sign in to comment.