Java 为什么log4j在重复(多次)相同的异常之后禁用堆栈跟踪?

Java 为什么log4j在重复(多次)相同的异常之后禁用堆栈跟踪?,java,log4j,stack-trace,Java,Log4j,Stack Trace,在我们的一个客户安装中,我们发生了数千次相同的异常。在大量记录良好的stacktrace(9332)之后,仍然会记录异常的发生,但不会记录stacktrace。在重新启动java进程之后,同样的事情发生了:这次我们有17858个堆栈跟踪,然后只有异常发生本身 有一个类似的问题,但没有答案 它是log4j特性还是bug?(我相信前者,因为我真的很喜欢那些阿帕奇人所做的事情) 有什么想法吗?对我来说听起来像是一个功能,至少如果堆栈跟踪确实相同的话。为什么你想让你的日志更大(从而更难搜索),而不获得更

在我们的一个客户安装中,我们发生了数千次相同的异常。在大量记录良好的stacktrace(9332)之后,仍然会记录异常的发生,但不会记录stacktrace。在重新启动java进程之后,同样的事情发生了:这次我们有17858个堆栈跟踪,然后只有异常发生本身

有一个类似的问题,但没有答案

它是log4j特性还是bug?(我相信前者,因为我真的很喜欢那些阿帕奇人所做的事情)


有什么想法吗?

对我来说听起来像是一个功能,至少如果堆栈跟踪确实相同的话。为什么你想让你的日志更大(从而更难搜索),而不获得更多的信息?将检查此功能的可配置性


编辑:我已经查看了log4j代码,没有任何痕迹。这将有力地表明罗伯特的答案是正确的。漂亮的虚拟机功能(IMO:)

使用Java5或更高版本

然后你会看到:

服务器VM中的编译器现在为所有“冷”内置异常提供正确的堆栈回溯。出于性能目的,当多次抛出此类异常时,可以重新编译该方法。在重新编译之后,编译器可以使用不提供堆栈跟踪的预分配异常选择更快的策略。要完全禁用预分配异常的使用,请使用此新标志:
-XX:-ommitStackTraceInFastThrow


由提供。

谢谢您的回答。我不想让我的日志文件变大(我喜欢这个特性——即使它是一个bug…)。问题是,我第一次看到那些没有堆栈跟踪的日志条目(甚至不认为还有其他日志条目),当我试图在代码中查找bug时,这并没有多大帮助。谢谢。这听起来像是正确的答案,我会仔细检查,然后接受这是正确的答案。发布说明不再可访问,我找到的最后一个存档捕获来自。尽管我想检查原始来源,但相关项目的报价已完成。