summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndi Albrecht <albrecht.andi@gmail.com>2009-04-30 07:42:34 +0200
committerAndi Albrecht <albrecht.andi@gmail.com>2009-04-30 07:42:34 +0200
commit290503d98eedf72e3be2400563191a27791e7d6a (patch)
treec6bf0e4eebda86b4ec2804468d9bdf133d3c0ecf
parent73e08937ed5de0e5106408da32cdb3cb71af5b8c (diff)
downloadsqlparse-290503d98eedf72e3be2400563191a27791e7d6a.tar.gz
Added mail hook to track exceptions on App Engine application.
-rw-r--r--.hgignore3
-rw-r--r--extras/appengine/main.py20
2 files changed, 21 insertions, 2 deletions
diff --git a/.hgignore b/.hgignore
index e48efd0..b5cf661 100644
--- a/.hgignore
+++ b/.hgignore
@@ -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.