浏览代码

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
Adrian Holovaty 14 年之前
父节点
当前提交
304a50d8ca
共有 2 个文件被更改,包括 33 次插入4 次删除
  1. 6 2
      django/utils/log.py
  2. 27 2
      docs/topics/logging.txt

+ 6 - 2
django/utils/log.py

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

+ 27 - 2
docs/topics/logging.txt

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