Javaでprintfデバッグする時ToStringBuilderが役に立つ

ローカルでデバッガ使いながら動かしてた時は大丈夫だったけど、サーバにデプロイするとよく分からないエラーが出てきたのでログに書き出してみよう!みたいな流れでこんなコードを仕込む事があると思います。

logger.info("id = " + obj.getId() + 
            " name = " + obj.getName());

このように2つくらいのフィールドを出力するだけならいいですが、もしフィールド数が多い場合に全てログ出力したい時はかなり面倒です。

こんな時にcommons-langのToStringBuilderを使えばとってもカンタンにできたりします。

logger.info(ToStringBuilder.reflectionToString(obj, ToStringStyle.MULTI_LINE_STYLE));

表示結果はこんな感じ。

TestController$SampleClass@7ecec0c5[
  id=1
  name=horimislime
  age=17
]

第二引数のToStringStyleで表示フォーマットも指定できて、自分はいつもフィールドごとに改行を入れてくれるMULTI_LINE_STYLEを指定しています。とっても見やすい!

ToStringBuilderは名前の通りtoStringの実装をラクにするクラスなんですが、個人的にはこういうデバッグ用途の方が重宝していますw まわりで使っている人が少なかったので紹介でした。

他にもcommonsの便利メソッドをqiitaにまとめたので、よかったらどうぞ。

Java - 知らないと損しそうなApache Commonsの機能集 - Qiita [キータ]