diff options
| author | Andi Albrecht <albrecht.andi@gmail.com> | 2009-04-30 07:42:34 +0200 |
|---|---|---|
| committer | Andi Albrecht <albrecht.andi@gmail.com> | 2009-04-30 07:42:34 +0200 |
| commit | 290503d98eedf72e3be2400563191a27791e7d6a (patch) | |
| tree | c6bf0e4eebda86b4ec2804468d9bdf133d3c0ecf | |
| parent | 73e08937ed5de0e5106408da32cdb3cb71af5b8c (diff) | |
| download | sqlparse-290503d98eedf72e3be2400563191a27791e7d6a.tar.gz | |
Added mail hook to track exceptions on App Engine application.
| -rw-r--r-- | .hgignore | 3 | ||||
| -rw-r--r-- | extras/appengine/main.py | 20 |
2 files changed, 21 insertions, 2 deletions
@@ -2,6 +2,9 @@ syntax: glob docs/build dist MANIFEST +extras/appengine/django +extras/appengine/django.zip +extras/appengine/release extras/appengine/sqlparse extras/appengine/pygments extras/py3k/sqlparse diff --git a/extras/appengine/main.py b/extras/appengine/main.py index d0a8418..889bf2c 100644 --- a/extras/appengine/main.py +++ b/extras/appengine/main.py @@ -26,6 +26,8 @@ views.py, settings.py. import os import sys import logging +import traceback + # Log a message each time this module get loaded. logging.info('Loading %s, app version = %s', @@ -51,6 +53,7 @@ assert django.VERSION[0] >= 1, "This Django version is too old" # AppEngine imports. from google.appengine.ext.webapp import util +from google.appengine.api import mail # Helper to enter the debugger. This passes in __stdin__ and @@ -81,8 +84,21 @@ django.newforms = django.forms def log_exception(*args, **kwds): """Django signal handler to log an exception.""" - cls, err = sys.exc_info()[:2] - logging.exception('Exception in request: %s: %s', cls.__name__, err) + excinfo = sys.exc_info() + cls, err = excinfo[:2] + subject = 'Exception in request: %s: %s' % (cls.__name__, err) + logging.exception(subject) + try: + repr_request = repr(kwds.get('request', 'Request not available.')) + except: + repr_request = 'Request repr() not available.' + msg = ('Application: %s\nVersion: %s\n\n%s\n\n%s' + % (os.getenv('APPLICATION_ID'), os.getenv('CURRENT_VERSION_ID'), + '\n'.join(traceback.format_exception(*excinfo)), + repr_request)) + mail.send_mail_to_admins('albrecht.andi@googlemail.com', + '[%s] %s' % (os.getenv('APPLICATION_ID'), subject), + msg) # Log all exceptions detected by Django. |
