如何将Android应用程序日志发送到远程服务器?

在我的应用程序中,我想在遇到崩溃的情况下将日志发送到远程服务器。 我添加了try-catch块并且在catch中我将日志发送到服务器。 我想知道我应该抓住的所有例外情况。 每次崩溃都需要日志,以便我可以修复它。 抓住所有例外情况会是一个好习惯吗?

提前致谢。

以下是我从其他优秀答案中汲取的建议总结清单:

  • 捕获所有未处理的exception

    1. 创建一个实现java.lang.Thread.UncaughtExceptionHandlerExceptionHandler 。 您可以使用此类来自定义和记录错误。

    2. 把这个: Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler(this)); 在每个Activity类的OnCreate()方法(在super() )。

    3. 有关详细信息,请参阅Androidexception处理最佳实践中的这个优秀答案。

  • 将try / catch包含在外部/外部运行的所有代码中。 (例如 – 使用第三方组件的代码)

  • 围绕您知道的所有代码附加try / catch,在某些条件下可能会失败

    1. 没有互联网连接时
    2. 在I / O操作期间
    3. 当有可能疯狂的用户输入
    4. 当有可能被零分割时
  • 在顶层使用try / catch,因为所有exception都会冒泡到顶层。 因此,在内部函数中,如果需要,可以考虑使用throwexception。 然后,在顶层, 捕获特定的exception并正确地在catch块中对exception类型进行排序 。 (从这个伟大的答案中提到: 如何使用try catch进行exception处理是最佳实践

  • 对于UI,即使发生错误(如果错误是由于没有互联网连接),您也应该通过提供应用程序的“有限function”版本来提供“持续可用性”。

  • 向用户报告的过度错误并不是一个好主意。

  • 持久性错误消息很糟糕。 通过消息通知用户并让用户关闭/删除它。

参考1 | 参考2 | 参考3 | 进一步阅读1 | 进一步阅读2 | 进一步阅读3


要使Android库远程记录未处理的exception,您可以看一下: android-remote-stacktrace 。

  • 下载.jar文件。
  • 将其添加到Java Build路径。
  • 添加INTERNET权限:uses-permission android:name =“android.permission.INTERNET”

  • 在您的活动或服务的OnCreate方法中,输入’ExceptionHandler.register(this,“ http://your.domain/path ”);’

  • 在您的服务器上,放置此PHP文件 ,您可以编辑该文件以扩展function。

您可以使用Crashlytics或Bugsense

https://mint.splunk.com/

https://try.crashlytics.com/