Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我们应该为托管异常记录stacktrace吗?_Java_Logging_Printstacktrace - Fatal编程技术网

Java 我们应该为托管异常记录stacktrace吗?

Java 我们应该为托管异常记录stacktrace吗?,java,logging,printstacktrace,Java,Logging,Printstacktrace,我在这个问题上做了很多研究,但没有找到真正的答案 试着想象一个程序执行一个多线程调用一个可调用函数。 为此,我们启动一个带有特定超时的ExecutorService,该超时调用所有进程 因此,我们有一个try…catch块,包含多个异常: 超时的CancellationException 如果在线程中引发异常,则执行异常 突然停止的中断异常 哲学是只记录一条消息,还是记录消息和可丢弃的内容(因此是stacktrace) 总而言之,我们应该这样做: } catch (CancellationE

我在这个问题上做了很多研究,但没有找到真正的答案

试着想象一个程序执行一个多线程调用一个可调用函数。 为此,我们启动一个带有特定超时的ExecutorService,该超时调用所有进程

因此,我们有一个try…catch块,包含多个异常:

  • 超时的CancellationException
  • 如果在线程中引发异常,则执行异常
  • 突然停止的中断异常
哲学是只记录一条消息,还是记录消息和可丢弃的内容(因此是stacktrace)

总而言之,我们应该这样做:

} catch (CancellationException ce) {
    logger.error("Timeout. Process cancelled", ce);
}
还是只记录消息错误

stacktrace是否被视为仅针对Bug显示


谢谢。

对于编码,您应该遵循以下模式:

} catch (CancellationException ce) {
    logger.error("Timeout. Process cancelled", ce);
}
原因是Throwable捕获了错误的完整上下文。如果您从记录器中省略了该上下文的一部分,那么如果需要,您以后将永远无法访问它。甚至Java附带的Throwable类也随着时间的推移进行了修改,以包含诸如链式和抑制式异常之类的内容。因此,即使您只希望从这个可丢弃的文件中获得消息,您仍然可能希望看到被抑制异常和异常原因的完整堆栈跟踪


在输出端,我认为您可以证明,对于某些异常,堆栈跟踪并不重要。在某些情况下,目标受众不得或不希望看到异常堆栈跟踪。对于这些情况,我们应该利用框架的功能来更改已发布的输出,以满足目标受众的需求。如果需要随时间变化,您可以调整日志记录配置,而无需修复应用程序代码。

如果错误未被纠正,例如出现了错误,那么您也需要记录堆栈跟踪。如果您不关心倾向于错误(只想打印消息),那么就不需要stacktrace。您可以使用stacktrace查找错误发生的位置。如果你不在乎在哪里,那就不需要了