1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- Error reporting via email
- =========================
- When you're running a public site you should always turn off the
- :setting:`DEBUG` setting. That will make your server run much faster, and will
- also prevent malicious users from seeing details of your application that can be
- revealed by the error pages.
- However, running with :setting:`DEBUG` set to ``False`` means you'll never see
- errors generated by your site -- everyone will just see your public error pages.
- You need to keep track of errors that occur in deployed sites, so Django can be
- configured to email you details of those errors.
- Server errors
- -------------
- When :setting:`DEBUG` is ``False``, Django will email the users listed in the
- :setting:`ADMINS` setting whenever your code raises an unhandled exception and
- results in an internal server error (HTTP status code 500). This gives the
- administrators immediate notification of any errors. The :setting:`ADMINS` will
- get a description of the error, a complete Python traceback, and details about
- the HTTP request that caused the error.
- .. note::
- In order to send email, Django requires a few settings telling it
- how to connect to your mail server. At the very least, you'll need
- to specify :setting:`EMAIL_HOST` and possibly
- :setting:`EMAIL_HOST_USER` and :setting:`EMAIL_HOST_PASSWORD`,
- though other settings may be also required depending on your mail
- server's configuration. Consult :doc:`the Django settings
- documentation </ref/settings>` for a full list of email-related
- settings.
- By default, Django will send email from root@localhost. However, some mail
- providers reject all email from this address. To use a different sender
- address, modify the :setting:`SERVER_EMAIL` setting.
- To disable this behavior, just remove all entries from the :setting:`ADMINS`
- setting.
- .. seealso::
- .. versionadded:: 1.3
- Server error emails are sent using the logging framework, so you can
- customize this behaviour by :doc:`customizing your logging configuration
- </topics/logging>`.
- 404 errors
- ----------
- Django can also be configured to email errors about broken links (404 "page
- not found" errors). Django sends emails about 404 errors when:
- * :setting:`DEBUG` is ``False``
- * :setting:`SEND_BROKEN_LINK_EMAILS` is ``True``
- * Your :setting:`MIDDLEWARE_CLASSES` setting includes ``CommonMiddleware``
- (which it does by default).
- If those conditions are met, Django will email the users listed in the
- :setting:`MANAGERS` setting whenever your code raises a 404 and the request has
- a referer. (It doesn't bother to email for 404s that don't have a referer --
- those are usually just people typing in broken URLs or broken Web 'bots).
- You can tell Django to stop reporting particular 404s by tweaking the
- :setting:`IGNORABLE_404_ENDS` and :setting:`IGNORABLE_404_STARTS` settings. Both
- should be a tuple of strings. For example::
- IGNORABLE_404_ENDS = ('.php', '.cgi')
- IGNORABLE_404_STARTS = ('/phpmyadmin/',)
- In this example, a 404 to any URL ending with ``.php`` or ``.cgi`` will *not* be
- reported. Neither will any URL starting with ``/phpmyadmin/``.
- The best way to disable this behavior is to set
- :setting:`SEND_BROKEN_LINK_EMAILS` to ``False``.
- .. seealso::
- You can also set up custom error reporting by writing a custom piece of
- :ref:`exception middleware <exception-middleware>`. If you do write custom
- error handling, it's a good idea to emulate Django's built-in error handling
- and only report/log errors if :setting:`DEBUG` is ``False``.
- .. seealso::
- .. versionadded:: 1.3
- 404 errors are logged using the logging framework. By default, these log
- records are ignored, but you can use them for error reporting by writing a
- handler and :doc:`configuring logging </topics/logging>` appropriately.
|