2015年12月24日木曜日

標準エラー出力されない環境でのデバッグ方法

ESBグループの打田です。



今回はグループで扱っているESB製品を使っていたときのTIPSです。
このESB製品ですが、ビジネスロジックをフローサービスとJavaサービスの2通りの方法で表現できます。
しかし、フローサービスの場合はステップバイステップのデバッグが可能ですが、Javaサービスの場合はステップバイステップのデバッグが出来ません。
さらに、よくありがちな例外をキャッチしたときのスタックトレースを出そうにも、標準出力や標準エラー出力がどこにも出力されません。

例外をキャッチする例
try {
    //処理本体
} catch (Exception e) {
    e.printStackTrace();
}
これにはトホホな感じでした。
処理本体でエラーが発生しても、何が原因でエラーが発生しているのかまったく情報が出てきませんでした。

そこでエラーが発生したときの状況をファイルに出力することにしました。
今まで使ったことがなかったのですが、printStackTrace()メソッドにはPrintWriterを引数に渡すことが出来ます。そこにFileWriterを渡せばうまくいくのではないかと。

例外をファイル出力する例

try {
    //処理本体
} catch (Exception e) {
    try {
        FileWriter fw = new FileWriter("C:/log/stackTrace.txt");
        e.printStackTrace(new PrintWriter(fw));
        fw.close();
    } catch (IOException e2) {}
}
このESB製品でのカレントディレクトリがはっきりしなかったので、ログファイルをフルパスで指定しています。
とても短いコードですが、その効果は想像以上でデバッグが出来るようになりました。

もし似たような環境でデバッグする必要がありましたら、参考にしてください。

0 件のコメント:

コメントを投稿