1. ホーム
  2. logging

[解決済み] なぜ "log and throw "はアンチパターンと言われるのか?[クローズド]

2022-12-09 19:46:59

質問

この質問は、以下のような議論に端を発しています。 この記事 での議論に端を発したもので、良い回答は得られませんでした。

例外をログに記録し、それを再スローする (もちろん元のスタック トレースを維持する) ことは、そうでなければ処理できない場合、なぜ悪い考えなのでしょうか?

どのように解決するのですか?

その答えは、「自分が処理できないのになぜキャッチしているのか」ということが大きいと思います。 処理できる人 (または処理するしかない人) が、ログに記録する価値があると感じたら、それを記録させればよいのではないでしょうか。

もしあなたがそれをキャッチしてログに記録し、rethrowするなら、上流のコードにはあなたがすでに例外をログに記録したことを知る方法がないので、同じ例外が二度記録されるかもしれません。 さらに悪いことに、すべての上流のコードがこの同じパターンに従う場合、例外をキャッチし、ログに記録し、再び投げることを決定するコード内の各レベルのために、例外は任意の回数ログに記録されるかもしれません。

また、例外のスローとキャッチは比較的コストのかかる操作なので、このすべてのキャッチと再スローは実行時のパフォーマンスに役立たないと主張する人もいるかもしれません。 また、簡潔さや保守性という点でも、コードの助けになりません。