2

Java では、例外をキャッチすると、通常、printStackTrace()method を使用してエラー情報を出力できます。また、 を使用printStackTrace(PrintStream out)してそれらの情報をファイルに送信することもできます。

しかし、を使用するのと同じように、これらの情報を既存のファイルに追加するにはどうすればよいout.append()ですか?

4

2 に答える 2

9

追加モードでファイルを開く必要があります。

try {
    //...
} catch (Exception e) {
    try(Writer w = new FileWriter("file.log", true)) {
        e.printStackTrace(new PrintWriter(new BufferedWriter(w)));
    }
}

Java 7 を使用していない場合は、Writer. または、グローバルWriterにすることもできますが、スレッド間で同期する必要があります。

、さらにはのような既存の Java ライブラリを単に使用するのはどうjava.util.loggingですか? 簡単に言うと:

} catch (Exception e) {
    log.error("Opps!", e);
}

...そして、フレームワークは、スレッド名、タイムスタンプ、追加メッセージなどの多くの追加データとともに、必要な場所で例外をログに記録します。Logback は、指定されたスタック フレームがどのライブラリからのものであるかを示し、スタック トレースの開始点を出力することもできます。根本原因から (最もネストされた例外)。

于 2012-12-08T12:19:20.580 に答える
5

エラーストリームをファイルにリダイレクトできます

System.setErr(new PrintStream(new FileOutputStream("errors.txt", true), true));

次に、Throwable.printStackTrace() は errors.txt に出力します。

FileOutputStream コンストラクターの「true」は「追加」を意味します。PrintStream コンストラクターの「true」は「autoflush」を意味します。FileOutputStream を閉じないことを心配する必要はありません。アプリが終了すると OS が閉じます。

于 2012-12-08T13:09:00.880 に答える