在java中,当我们捕获异常时,我们通常可以使用printStackTrace()
方法来打印错误信息,我们也可以使用printStackTrace(PrintStream out)
将这些信息引导到文件中。
但是如何将这些信息附加到现有文件中,就像使用out.append()
?
答案 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库,如logback,log4j甚至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,操作系统会在应用程序结束时关闭它。