ログに長々をエラーメッセージが出力された時、バグの場所を特定するにはどうすればいいでしょうか。
エラーログにはエラーのスタックトレース(エラーが起きたメソッド名、.javaファイル名とその行数など)が表示されるので、その1つがバグの場所そのものなのですが、その中にはJavaの組み込みメソッドも数多く表示されますし編集不可のファイルも表示されるので、この中からバグの場所を探し出すのはなかなか大変です。
そんなときに助けになるのがエラーログの最初の行です。例えば次のようなエラーログが表示されたとします。
2014-04-06 19:03:26,608 <ERROR> (http-8080-5) [JetspeedLogger.java:157]- [org0000525] MyPortletScreen.doOutput org.apache.cayenne.CayenneRuntimeException: [v.2.0.4 October 12 2007] Commit Exception at org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:1262) at org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:1138) ...
この場合、
logger.error("MyPortletScreen.doOutput"
でテキスト検索すればエラーログが出力された箇所をかなり特定できますし(括弧を閉じていないのは、第2引数が特定できないからです)、まず見てすぐにエラーの箇所はだいたい見当が付きます。
そのためにも、loggerでログを表示する時にはそのログの意味を理解しやすいように、出力する内容を考える習慣を付けておくと良さそうですね。