Java では、例外をキャッチすると、通常、printStackTrace()
method を使用してエラー情報を出力できます。また、 を使用printStackTrace(PrintStream out)
してそれらの情報をファイルに送信することもできます。
しかし、を使用するのと同じように、これらの情報を既存のファイルに追加するにはどうすればよいout.append()
ですか?
Java では、例外をキャッチすると、通常、printStackTrace()
method を使用してエラー情報を出力できます。また、 を使用printStackTrace(PrintStream out)
してそれらの情報をファイルに送信することもできます。
しかし、を使用するのと同じように、これらの情報を既存のファイルに追加するにはどうすればよいout.append()
ですか?
追加モードでファイルを開く必要があります。
try {
//...
} catch (Exception e) {
try(Writer w = new FileWriter("file.log", true)) {
e.printStackTrace(new PrintWriter(new BufferedWriter(w)));
}
}
Java 7 を使用していない場合は、Writer
. または、グローバルWriter
にすることもできますが、スレッド間で同期する必要があります。
logback、log4j、さらにはのような既存の Java ライブラリを単に使用するのはどうjava.util.logging
ですか? 簡単に言うと:
} catch (Exception e) {
log.error("Opps!", e);
}
...そして、フレームワークは、スレッド名、タイムスタンプ、追加メッセージなどの多くの追加データとともに、必要な場所で例外をログに記録します。Logback は、指定されたスタック フレームがどのライブラリからのものであるかを示し、スタック トレースの開始点を出力することもできます。根本原因から (最もネストされた例外)。
エラーストリームをファイルにリダイレクトできます
System.setErr(new PrintStream(new FileOutputStream("errors.txt", true), true));
次に、Throwable.printStackTrace() は errors.txt に出力します。
FileOutputStream コンストラクターの「true」は「追加」を意味します。PrintStream コンストラクターの「true」は「autoflush」を意味します。FileOutputStream を閉じないことを心配する必要はありません。アプリが終了すると OS が閉じます。