HHeLiBeXの日記 正道編

日々の記憶の記録とメモ‥

例外は例外なく記録せよ

これは大昔から「例外は握りつぶすな」というような感じで言われていることだが、まだまだまだまだ存在する。トラブルの原因調査を妨げるという意味で一種の爆弾コード。

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の例外は例外なくログに記録せよ(いやほんとに洒落じゃなくて)

ということですな。