Search code examples
google-app-engineexceptioncatch-all

Catch-All global exception handler in App Engine for Python


Is it possible to create a catch-all global exception handler in Google App Engine using Python?

Basically, I want to catch all un-caught exceptions and gracefully handle it, while sending an email with the traceback to me.

Currently, for all uncaught errors, the users see a stacktrace with a snippet of code in it. This is undesirable.


Solution

  • Yes it is possible.
    You can do it using the ereporter package that allows to receive exception reports from your application by email.

    Ereporter will report two kind of exceptions:

    • exceptions logged with logging.exception('Your handled exception')
    • any uncaught exceptions

    To catch all the exceptions, I would create a custom BaseHandler class overriding the handle_exception() method; all your request handlers should inherit from this Base class.
    Have a look to Custom Error Responses too.

    Here is a simple example of BaseHandler class:

    class BaseHandler(webapp.RequestHandler):
    
        def handle_exception(self, exception, debug_mode):
            if debug_mode:
                webapp.RequestHandler.handle_exception(self, exception, debug_mode)
            else:
                logging.exception(exception)
                self.error(500)
                self.response.out.write(template.render('templdir/error.html', {}))