繁体   English   中英

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

[英]How to append an exception's StackTrace into a file in java?

在java中,当我们捕获异常时,我们通常可以使用printStackTrace()方法来打印错误信息,我们也可以使用printStackTrace(PrintStream out)将这些信息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 或者你可以有一个全局的Writer ,但是你必须在线程之间同步它。

如何简单地使用一些现有的Java库,如甚至java.util.logging 简单地说:

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM