在 Java 应用程序中收集异常报告

Posted

技术标签:

【中文标题】在 Java 应用程序中收集异常报告【英文标题】:Collect exception reports in Java application 【发布时间】:2013-04-27 02:17:39 【问题描述】:

我目前正在维护一个拥有中小型用户群的桌面 Java 应用程序。我经常收到一些非常无用的邮件,说“出了点问题”,而我一直在挖掘源代码,经常无法重现问题。

现在我想知道是否有一个库可以让我在异常发生时收集异常,向用户显示一个小对话框,如果/当他们同意时,将堆栈跟踪发布到我的网络服务器。基本上,我正在寻找类似于 Application Crash Report for android (ACRA) 的东西,但用于桌面 Java 应用程序。

【问题讨论】:

你试过了吗? ***.com/questions/1312851/… 您可以通过在应用程序开始时调用System.setErr(new java.io.PrintStream(new java.io.File(filename))); 将其放入日志文件中。这会将System.err 中的所有内容输出到文件中。 我会使用日志记录,使用 SLF4j 或 log4j 将错误存储在定义的日志文件中。但这只是我logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/… @cdecker 你能给我们一个sscce 的代码,显示这些电子邮件是如何发送给你的吗?例如,您是否在记录器发送电子邮件时使用某种记录框架? 我们已经在使用 SLF4J 进行日志记录,但我还没有办法将日志和堆栈跟踪详细信息自动传送回我们的服务器,以便我们收集、确定优先级并修复原因。我需要的是一些可以从异常处理程序内部调用的库,以收集有关应用程序(版本、配置等)和正在处理的异常的信息,然后将其传递到我们的服务器。 【参考方案1】:

如果您使用 SLF4J 和 Logback,您可以配置附加程序以将详细的错误报告发送到 Ctrlflow Automated Error Reporting 服务器(它提供传入报告 + 仪表板 + 电子邮件摘要的过滤和聚合)。这个blog post 包含有关如何相应配置 Logback 的所有信息。

如果您想首先向您的用户显示确认对话框,您可能必须扩展现有的附加程序——除非您的“桌面 Java 应用程序”是“Eclipse 富客户端平台应用程序”。在这种情况下,工作已经为您完成。请参阅此webinar 了解更多信息。

【讨论】:

以上是关于在 Java 应用程序中收集异常报告的主要内容,如果未能解决你的问题,请参考以下文章

Java 异常报告 GUI 的后端

java的崩溃报告

NSException:如何添加 userData 并重新抛出?

Ubuntu内部错误信息及处理

垃圾收集的核心数据程序中的奇怪崩溃

异常捕获 ACRA 崩溃报告