如何最好地实现简单的崩溃/错误报告?

Posted

技术标签:

【中文标题】如何最好地实现简单的崩溃/错误报告?【英文标题】:How to best implement simple crash / error reporting? 【发布时间】:2010-09-10 07:15:31 【问题描述】:

实现简单的崩溃/错误报告机制的最佳方式是什么?

详细信息:我的应用程序是跨平台 (mac/windows/linux) 并用 Python 编写的,所以我只需要一些可以向我发送少量文本的东西,例如只是一个时间戳和一个回溯(我已经生成并在我的错误对话框中显示)。

如果它可以简单地通过电子邮件发送它会很好,但我想不出一种方法来做到这一点,而不在应用程序中包含 smtp 服务器的用户名和密码...... 我应该在服务器端实现一个简单的 Web 服务,并让我的应用程序向它发送一个带有信息的 HTTP 请求吗?有更好的想法吗?

【问题讨论】:

你有没有想出一个你愿意分享的实现,尤其是在服务器端?干杯! 【参考方案1】:

网络服务是最好的方式,但有一些注意事项:

    您应该始终询问用户是否可以发送错误反馈信息。 如果出现网络错误,您应该做好正常失败的准备。不要让未能报告崩溃阻碍恢复! 您应该避免包含用户识别信息或敏感信息,除非用户知道(参见 #1)并且您应该使用 SSL 或以其他方式保护它。有些司法管辖区给您带来了您可能不想处理的负担,因此最好不要保存此类信息。 与任何 Web 服务一样,请确保您的服务不会被不法分子利用。

【讨论】:

【参考方案2】:

如果不在应用程序中包含 smtp 服务器的用户名和密码,我想不出办法...

您只需要一个用户名和密码就可以向智能主机验证自己的身份。您不需要它直接发送邮件,您需要它通过中继发送邮件,例如您的 ISP 的邮件服务器。完全有可能在没有身份验证的情况下发送电子邮件 - 这就是垃圾邮件如此难以阻止的原因。

话虽如此,一些 ISP 会阻止端口 25 上的出站流量,因此最强大的替代方案是 HTTP POST,它不太可能被任何东西阻止。请务必选择一个您以后不会觉得受到限制的 URL,或者更好的是,让应用程序定期检查更新,因此如果您决定更改域或其他内容,您可以提前推送更新。

安全并不是真正的问题。您可以相当容易地丢弃垃圾数据,因此您真正关心的是是否有人会不厌其烦地构建虚假的回溯来干扰您,这是一种非常不可能的情况。

至于有效载荷,PyCrash 可以帮助您。

【讨论】:

【参考方案3】:

网络热门是要走的路,但请确保您选择了一个好的网址 - 您的应用将在未来几年内获得成功。

【讨论】:

【参考方案4】:

PyCrash?

【讨论】:

【参考方案5】:

无论您使用 SMTP 还是 HTTP 发送数据,您都需要在应用程序中设置用户名/密码,以防止任何人向您发送随机数据。

考虑到这一点,我怀疑使用 SMTP 而不是 HTTP 来发送数据会更容易。

【讨论】:

【参考方案6】:

某种简单的网络服务就足够了。您必须考虑安全性,因此不只是任何人都可以向您的服务提出请求..

在更大的范围内,我们考虑了 JMS 消息传递系统。将包含回溯/错误消息的数据序列化对象放入队列中,每 x 分钟使用一次,从该数据生成报告/警报。

【讨论】:

以上是关于如何最好地实现简单的崩溃/错误报告?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用原生崩溃报告在 Swift 4 中实现异常/错误处理?

如何找出这些错误。我的应用程序崩溃了 6 次(来自应用程序分析的报告)?

Firebase 崩溃报告上传错误

不要忘记在错误报告中包含 DiagnosticReports 目录下的崩溃报告日志文件

调解中心崩溃报告中的错误执行顺序

如何有效地报告 Bug