Pythonを使用してGoogle App Engineでcatch-allグローバル例外ハンドラを作成することはできますか?キャッチ - App Engine for Pythonのすべてのグローバル例外ハンドラ
基本的に、捕捉されていない例外をすべて捕捉し、正常に処理したいと思っていますが、トレースバック付きのメールを私に送信します。
現在、すべてのキャッチされていないエラーについて、ユーザーにはコードスニペットを含むスタックトレースが表示されます。これは望ましくない。
Pythonを使用してGoogle App Engineでcatch-allグローバル例外ハンドラを作成することはできますか?キャッチ - App Engine for Pythonのすべてのグローバル例外ハンドラ
基本的に、捕捉されていない例外をすべて捕捉し、正常に処理したいと思っていますが、トレースバック付きのメールを私に送信します。
現在、すべてのキャッチされていないエラーについて、ユーザーにはコードスニペットを含むスタックトレースが表示されます。これは望ましくない。
はい、それは可能です。
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', {}))
試してみてください。 コール 除く: http://docs.python.org/tutorial/errors.html
のsendEmail
エラーを検出する方法はわかっています。私の質問は、GAEで実行しているアプリケーションでエラーをグローバルに捕捉する方法です。 – Derick
あなたは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)
恐ろしいです!これは私の問題の半分を解決するように見えますが、これを有効にすると、捕捉されない例外が発生したときにユーザーは何を表示しますか?未処理のすべての例外について、ユーザーをデフォルトのエラーページにリダイレクトすることができますか? – Derick
@Derick私の編集を参照してください – systempuntoout
ありがとう!私はPythonでそれほど素晴らしいとは言えませんが、webapp.RequestHandlerクラスのためにこれを行う方法のコードスニペットを含めることができますか?本当に感謝します。 – Derick