[解決済み] なぜ "log and throw "はアンチパターンと言われるのか?[クローズド]
2022-12-09 19:46:59
質問
この質問は、以下のような議論に端を発しています。 この記事 での議論に端を発したもので、良い回答は得られませんでした。
例外をログに記録し、それを再スローする (もちろん元のスタック トレースを維持する) ことは、そうでなければ処理できない場合、なぜ悪い考えなのでしょうか?
どのように解決するのですか?
その答えは、「自分が処理できないのになぜキャッチしているのか」ということが大きいと思います。 処理できる人 (または処理するしかない人) が、ログに記録する価値があると感じたら、それを記録させればよいのではないでしょうか。
もしあなたがそれをキャッチしてログに記録し、rethrowするなら、上流のコードにはあなたがすでに例外をログに記録したことを知る方法がないので、同じ例外が二度記録されるかもしれません。 さらに悪いことに、すべての上流のコードがこの同じパターンに従う場合、例外をキャッチし、ログに記録し、再び投げることを決定するコード内の各レベルのために、例外は任意の回数ログに記録されるかもしれません。
また、例外のスローとキャッチは比較的コストのかかる操作なので、このすべてのキャッチと再スローは実行時のパフォーマンスに役立たないと主張する人もいるかもしれません。 また、簡潔さや保守性という点でも、コードの助けになりません。
関連
-
[解決済み] 投げる」と「投げる元」は違うのですか?
-
[解決済み] 作者と日付を含む git log からの最短出力
-
[解決済み】C#で例外をキャッチして再スローする理由とは?
-
[解決済み】 `throw new Error` と `throw someObject` の違いは何ですか?
-
[解決済み】アンチパターンとは何ですか?
-
[解決済み】なぜjava.util.loggingを使用しないのですか?
-
[解決済み] start-stop-daemonで起動したプロセスのstdoutを記録するにはどうすればよいですか?
-
[解決済み] Log.INFO vs. Log.DEBUG [終了しました。]
-
[解決済み] プログラムの運用に最適なHaskellのライブラリは?[クローズド]
-
[解決済み] コマンドウィンドウの行数を増やす
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン