在java中,当我们捕捉到异常时,我们通常可以使用printStackTrace()
方法来打印错误信息,也可以使用printStackTrace(PrintStream out)
将这些信息直接写入文件。
但是我怎样才能将这些信息附加到现有文件中,就像使用out.append()
?
在java中,当我们捕捉到异常时,我们通常可以使用printStackTrace()
方法来打印错误信息,也可以使用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
. 或者你可以有一个 global Writer
,但是你必须在线程之间同步它。
简单地使用一些现有的 Java 库,如logback、log4j甚至是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 condtructor 中的“true”表示“自动刷新”。我们不必担心永远不会关闭 FileOutputStream,OS 会在应用程序结束时关闭它。