6

アプリケーションで発生するキャッチされない例外をインターセプトするためのクリーンな方法を見つけようとしています。

通常のアプリケーションフローをログに記録するようにlog4jを構成し、例外をキャッチしたので、それが処理されます。現在、すべてのエラーレベルのメッセージを受け取り、それらをキューに追加してバッチで電子メールで送信するクラスがあります。

理想的には、キャッチされなかった例外をインターセプトして、同じ「電子メールバッチ」キューに渡すことができる方法があることを望んでいますが、これが不可能な場合は、確かに提案を受け入れます。

私はJBossのLogInterceptorsに精通していますが、このプロジェクトはTomcatを使用しています。私がこれについて行くかもしれない方法はありますか?Tomcatに相当するLogInterceptorはありますか?Tomcatログをカスタムアペンダーにリダイレクトする必要がありますか?(もしそうなら-それについてのヒントはありますか?)他のアイデアはありますか?

これ今では解決された問題だと思ったので、いくつかの集合的な知恵を活用したいと思っています。みなさん、よろしくお願いします。

4

2 に答える 2

5

J2EE 1.4仕様に従って、サーブレット内のキャッチされなかった例外は、デプロイメント記述子で定義されているエラーページに転送される場合があります。これが発生すると、ページ実装は、例外オブジェクトを含むjavax.servlet.error.exceptionという名前の要求属性が追加された、元の要求オブジェクトと応答オブジェクトを受け取ります。

とは言うものの、私は実際にTomcatでこれを行ったことがなく、私が取り組んだほとんどのWebアプリケーションは、Webサーバーレベルの一般的なエラーページに転送します。

編集:web.xmlに以下を追加した後、ローカルサーバーで試してみたところ、宣伝どおりに機能します。

<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/dumpRequest.jsp</location>
</error-page>
于 2008-12-21T15:45:17.247 に答える
1

これはTomcat固有ではありませんが、スレッドごとにキャッチされない例外ハンドラーを設定できます。

アプリケーションの設定によっては、リクエストを処理するメソッドの先頭にこれを設定できます。リクエストごとにスレッドを取得する可能性があるため、毎回実行する必要がある場合があります。

それを設定するのに適した場所は、ある種のフロントコントローラーです。

于 2008-12-21T15:51:43.817 に答える