2010-11-28 15 views
6

Pythonを使用してGoogle App Engineでcatch-allグローバル例外ハンドラを作成することはできますか?キャッチ - App Engine for Pythonのすべてのグローバル例外ハンドラ

基本的に、捕捉されていない例外をすべて捕捉し、正常に処理したいと思っていますが、トレースバック付きのメールを私に送信します。

現在、すべてのキャッチされていないエラーについて、ユーザーにはコードスニペットを含むスタックトレースが表示されます。これは望ましくない。

答えて

11

はい、それは可能です。
ereporterパッケージを使用すると、アプリケーションからの例外レポートを電子メールで受け取ることができます。私はhandle_exception()をオーバーライドするカスタムたBaseHandlerクラスを作成し、任意のキャッチされない例外

すべての例外をキャッチするlogging.exception('Your handled exception')

  • でログイン

    • 例外:

      Ereporterは、例外の2種類を報告します方法;すべてのリクエストハンドラはこのBaseクラスから継承する必要があります。
      Custom Error Responsesもご覧ください。ここで

      はたBaseHandlerクラスの簡単な例です:

      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', {})) 
      
  • +0

    恐ろしいです!これは私の問題の半分を解決するように見えますが、これを有効にすると、捕捉されない例外が発生したときにユーザーは何を表示しますか?未処理のすべての例外について、ユーザーをデフォルトのエラーページにリダイレクトすることができますか? – Derick

    +0

    @Derick私の編集を参照してください – systempuntoout

    +0

    ありがとう!私はPythonでそれほど素晴らしいとは言えませんが、webapp.RequestHandlerクラスのためにこれを行う方法のコードスニペットを含めることができますか?本当に感謝します。 – Derick

    1

    あなたはBaseHandlerでは、以下を呼び出すことで、元のhandle_exceptionはを呼び出すこともできます:

    webapp.RequestHandler.handle_exception(self, exception, debug_mode) 
    

    ここでは、コンテキストにあります。

    from google.appengine.ext import webapp 
    import sys 
    import traceback 
    
    class BaseHandler(webapp.RequestHandler): 
        def handle_exception(self, exception, debug_mode): 
         from main import emaildevs 
         emaildevs('An error occurred on example.com', ''.join(traceback.format_exception(*sys.exc_info()))) 
         webapp.RequestHandler.handle_exception(self, exception, debug_mode) 
    
    関連する問題