如何将异常的StackTrace附加到java中的文件中?

时间:2012-12-08 12:12:05

标签: java exception printstream

在java中,当我们捕获异常时,我们通常可以使用printStackTrace()方法来打印错误信息,我们也可以使用printStackTrace(PrintStream out)将这些信息引导到文件中。

但是如何将这些信息附加到现有文件中,就像使用out.append()

一样

2 个答案:

答案 0 :(得分:7)

您必须以追加模式打开文件:

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);
}

...并且框架将在任何地方记录异常,包含许多其他数据,如线程名称,时间戳,附加消息等。回溯还可以显示给定堆栈帧来自哪个库,甚至打印出来从根本原因开始的堆栈跟踪(大多数嵌套异常)。

答案 1 :(得分:4)

我们可以将错误流重定向到文件

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

然后Throwable.printStackTrace()将打印到errors.txt。

FileOutputStream构造函数中的

“true”表示“追加”; PrintStream condtructor中的“true”表示“autoflush”。我们不必担心永远不会关闭FileOutputStream,操作系统会在应用程序结束时关闭它。