How do you log server errors on django sites How do you log server errors on django sites python python

How do you log server errors on django sites


Well, when DEBUG = False, Django will automatically mail a full traceback of any error to each person listed in the ADMINS setting, which gets you notifications pretty much for free. If you'd like more fine-grained control, you can write and add to your settings a middleware class which defines a method named process_exception(), which will have access to the exception that was raised:

http://docs.djangoproject.com/en/dev/topics/http/middleware/#process-exception

Your process_exception() method can then perform whatever type of logging you'd like: writing to console, writing to a file, etc., etc.

Edit: though it's a bit less useful, you can also listen for the got_request_exception signal, which will be sent whenever an exception is encountered during request processing:

http://docs.djangoproject.com/en/dev/ref/signals/#got-request-exception

This does not give you access to the exception object, however, so the middleware method is much easier to work with.


Django Sentry is a good way to go, as already mentioned, but there is a bit of work involved in setting it up properly (as a separate website). If you just want to log everything to a simple text file here's the logging configuration to put in your settings.py

LOGGING = {    'version': 1,    'disable_existing_loggers': False,    'handlers': {        # Include the default Django email handler for errors        # This is what you'd get without configuring logging at all.        'mail_admins': {            'class': 'django.utils.log.AdminEmailHandler',            'level': 'ERROR',             # But the emails are plain text by default - HTML is nicer            'include_html': True,        },        # Log to a text file that can be rotated by logrotate        'logfile': {            'class': 'logging.handlers.WatchedFileHandler',            'filename': '/var/log/django/myapp.log'        },    },    'loggers': {        # Again, default Django configuration to email unhandled exceptions        'django.request': {            'handlers': ['mail_admins'],            'level': 'ERROR',            'propagate': True,        },        # Might as well log any errors anywhere else in Django        'django': {            'handlers': ['logfile'],            'level': 'ERROR',            'propagate': False,        },        # Your own app - this assumes all your logger names start with "myapp."        'myapp': {            'handlers': ['logfile'],            'level': 'WARNING', # Or maybe INFO or DEBUG            'propagate': False        },    },}


django-db-log, mentioned in another answer, has been replaced with:

https://github.com/dcramer/django-sentry