私は、大規模な多層 Java アプリケーションでエラー処理のハンドル (har-har) を取得しようとしている環境に優しい開発者です。例外をいくつかの層に連鎖させることが良い考えであると私が信じる状況はたくさんあります。たとえば、最下層の外部サービスの呼び出しに失敗すると、ビュー全体で問題が発生します。
- コンテンツ X が要求されましたが、ユーザーは許可されていません
- 原因: 許可されたユーザーのリストが null です
- 原因: ユーザー管理 Web サービスが無効な要求を応答しました - パラメータ foo は「xyz」のようにフォーマットする必要があります
- 原因: 許可されたユーザーのリストが null です
最も重要な例外は、スタック トレースを実際に調べたい例外であり、チェーンの最後の例外です。不適切なリクエストを行ったため、foo のフォーマットを修正する必要があります。しかし、この例外をレイヤーにバブルアップさせると、各レイヤーにとって意味のある例外にうまく連鎖されます...最終的に物事をキャッチしてログに記録すると、デフォルトのログ動作は常に最も外側の例外に関する詳細のゴブを表示します.根本原因のスタック トレースのおそらく 5 行。
これにより、例外が発生したときに例外をログに記録し、バブルアップさせたいと思いますが、ほとんどのことを2回ログに記録することになります。それらがいつ発生し、最終的に捕まるとき。
ここでのベストプラクティスは何ですか?