ピラミッドウェブアプリケーションで「キャッチオール」エラー処理を処理できる方法はありますか?私は現在、例外ログを(http://docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/logging/sqlalchemy_logger.htmlのドキュメントを介して)データベースに実装しています。私は、自分の意見にメッセージを返して、何が起こったのかを「フレンドリーな」顔にします。ピラミッドキャッチオールフレンドリーな例外処理
しかし、何か一般的な「おっと、あなたが問題に遭遇し、私たちはそれを調べています」と明示的に捕まえていないことを実装できるものがあります。データベースの内容をログに記録するエラーハンドラまたは、検索でどのようなことを探しているはずですか?
おかげで、私はコメントにそれすべてに適合することはできませんので、
編集、: 。 ありがとう、それは私が探しているのとまったく同じようです!それが関係かいない場合、私はに実行している
ことの一つは、私が
は、だから私はそうのように、上記のようにSQLロガーを実装しています....知らない:class SQLAlchemyHandler(logging.Handler):
# A very basic logger that commits a LogRecord to the SQL Db
def emit(self, record):
trace = None
exc = record.__dict__['exc_info']
if exc:
trace = traceback.format_exc(exc)
log = Log(
logger=record.__dict__['name'],
level=record.__dict__['levelname'],
trace=trace,
msg=record.__dict__['msg'],)
DBSession.add(log)
DBSession.flush()
#transaction.commit()
トランザクションを使用するときにSQLAlchemy DetachedInstanceError例外が発生したため、 'transaction.commit()'コールを取り出して代わりに.flush()を使用する必要がありました。私はヘルパー関数にリクエストを渡すことでいくつかのゲームをしているからだと思うし、それが投げているようだ。したがって、セッションをフラッシュすることによって動作します。 Buuuutは、例外ビューが実際にスローされた場合、log.error()ステートメントを例外ビューに入れておけば、ビューのログステートメントはコミットされません。 Pyramidのデバッグログには、書き込まれていることが示されていますが、コミットされたことはありません。
ロギングハンドラをtransaction.commitに戻した場合、例外はになりますが、元の問題に戻ります。私は、私が最初にそれを引き起こしているヘルパー関数でやっていることに焦点を当てる必要があると思うが、私はまだ一般的にSQLAlchemyを学んでいる。時にはそれは少し奇妙なことがあります。
ああいいね!そして、これは_any_例外を処理するだろう_anywhere_ビューで呼び出し可能な、正しい?レスポンスを返す代わりに、私は技術的に「スロー」をもう一度行うことができますか?このアプローチは今日でも推奨されていますか? – Jens