2

在java中,当我们捕捉到异常时,我们通常可以使用printStackTrace()方法来打印错误信息,也可以使用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. 或者你可以有一个 global 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 condtructor 中的“true”表示“自动刷新”。我们不必担心永远不会关闭 FileOutputStream,OS 会在应用程序结束时关闭它。

于 2012-12-08T13:09:00.880 回答