当前位置: 首页 > 面试题库 >

如何停止在日志中截断的堆栈跟踪

叶阳
2023-03-14
问题内容

在Java日志中,很多时候我会得到类似以下内容的信息:

Caused by: java.sql.BatchUpdateException: failed batch
    at org.hsqldb.jdbc.jdbcStatement.executeBatch(jdbcStatement.java:1102)
    at org.hsqldb.jdbc.jdbcPreparedStatement.executeBatch(jdbcPreparedStatement.java:514)
    at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
    at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:242)
    ... 113 more

有谁知道如何显示完整的堆栈跟踪(即显示其他113行)?

Throwable 的JavaDocs(用于Java
7)
对正在发生的事情有非常详细的解释。


问题答案:

当您看到“ … 113更多”时,表示“由…引起的”异常的其余行与父异常的那一点起的其余行相同。

例如,您将拥有

com.something.XyzException
  at ...
  at ...
  at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:242)
  at ... <the other 113 lines are here>...
Caused by: <the above>.

这两个堆栈跟踪在AbstractBatcher.executeBatch的第242行“满足”,然后从此以后向上的调用跟踪与包装异常相同。



 类似资料:
  • 我有一个用Java定义的,用于在工作流中导航。 我需要能够接受一个字符串,检查堆栈,看看它是否有多个出现,然后弹出元素直到该字符串的“最底部”出现。“截断”对我想做的事情的描述可能很糟糕。“pop直到我命中任意索引”可能更接近我需要的。

  • 问题内容: 我只想在程序中记录异常的前几行。我知道,我可以执行以下操作以仅打印stacktrace的前5行: 但我宁愿使用log4j(或更精确地说,是在log4j上使用slf4j)进行日志记录。有没有办法告诉log4j它应该只打印stacktrace的前5行? 问题答案: 您可以在log4j中使用EnhancedPatternLayout来格式化堆栈跟踪。 请参阅http://logging.ap

  • 我在Scala/Play2.2.0应用程序上使用Logback 1.0.13。现有配置如下所示:

  • 问题内容: 是否有任何工具可以提取出现在日志文件中的堆栈跟踪列表,并可能计算出唯一的堆栈跟踪? 编辑 :我会提出一些不基于GUI的内容,并在后台运行并提供某种报告。我有很多从几种环境中收集的日志,只是想快速了解一下。 问题答案: 我想出了以下Groovy脚本。当然,它已经非常适应我的需求,但是我希望它能对某人有所帮助。

  • 问题内容: 程序中没有单个方法“知道”它在堆栈中的位置。它所知道的只是它自己的小工作,它完成了并返回了。因此,当引发异常并打印堆栈跟踪时,它是从哪里来的? 在JVM中监视程序状态的每个应用程序旁边隐式地运行着一个单独的线程吗?还是JVM本身保存此信息,并且在抛出异常时以某种方式从异常中提取数据? 如果是上述两种情况之一,是否可以使用某些调用来检索堆栈跟踪(从监视器线程或JVM) 而不会 引发异常?

  • Spring Boot(mvc)中是否有一种方法可以记录一个自定义异常,并在日志文件中不可见其堆栈跟踪的情况下抛出它?但对于任何其他异常,仍请参见堆栈跟踪。 现在的问题是,我不仅看到了日志条目,还看到了自定义异常的堆栈跟踪,而且找不到防止这种情况的方法。我想问题是再扔一次引起的。一个可能的解决方案是为exception创建一个自定义类,我将返回它,但我不喜欢这个想法,因为异常编组似乎工作得很好。