例外は例外なく記録せよ
これは大昔から「例外は握りつぶすな」というような感じで言われていることだが、まだまだまだまだ存在する。トラブルの原因調査を妨げるという意味で一種の爆弾コード。
Javaの例外は例外なくログに記録しましょう(洒落じゃなくて)。ログレベルに応じて出力する/しないを切り替えるのは、例外の内容によりますが、まぁありかと。
少なくとも、次のようなコードを書いちゃダメダメ。役に立ちません。
} catch (Exception e) { throw new XxxException("Error: " + e.getMessage()); }
Exceptionのメッセージが空だったりしたら、もはや手がかりがない‥
たとえば、NullPointerExceptionとか。この場合、上位のコードで例外のスタックトレースを出力させていたとしても、次のようなメッセージが記録されるだけで原因はなんだか分からず、悲しい気持ちになること請け合いです。
Exception in thread "main" XxxException: Error: null at BarClass.barProc(BarClass.java:nn) at FooClass.fooProc(FooClass.java:nn) at HogeClass.hogeProc(HogeClass.java:nn) at Main.main(Main.java:nn)
- 例外は常に発生するもの、再現方法とかが分からなくても、絶対発生すると決め付けるくらいの気持ちで処理せよ
- Javaの例外は例外なくログに記録せよ(いやほんとに洒落じゃなくて)
ということですな。