如何通过正确的 Crashlytics 错误分组获得更好的 RxJava 堆栈跟踪



我的目标是:

  • Log RxJava 链处理错误到 Firebase Crashlytics
  • 获取一些合理的堆栈跟踪(这也指向我的代码)
  • 正确完成 Firebase Crashlytics 错误分组(并非所有问题都归为一个问题)

当前设置:

  • 将错误侦听器添加到 rxjavasubscribe()并可抛出
  • 为了获得更好的堆栈跟踪,请使用 RxTracer 库
  • 使用Crashlytics.logException(t)记录可抛出到Firebase Crashlytics的
  • 日志

使用这种设置的探测是Firebase Crashlytics将几乎所有错误分组在RxTracerTracingObserver.java – line 2 - com.halfhp.rxtracer.TracingObserver.

我找不到任何方法将自定义分组等添加到Firebase Crashlytics中

你们是如何向Firebase Crashlytics报告RxJava错误的?

就像我在另一个答案中所说的那样,Crashlytics正在按创建根本原因异常的方法和行对问题进行分组。

上面链接的博客文章中提到的CompositeException是一个很好的工具,可以实现两件事:让您的异常成为根本原因,同时保留原始异常的堆栈跟踪。

Crashlytics.logException(CompositeException(throwable, RuntimeException()))

以上内容将按放置该代码段的位置对 Crashlytics 问题进行分组,因为RuntimeException将是记录异常的根本原因。

像这样的函数可能会更有用:

import androidx.annotation.Keep
import com.crashlytics.android.Crashlytics
import io.reactivex.exceptions.CompositeException
class NonFatalException(message: String, cause: Throwable? = null) : RuntimeException(message, cause)
class BreadcrumbException : RuntimeException() {
override fun getStackTrace() = super.getStackTrace()
.dropWhile { it.className == "com.example.NonFatalExceptionKt" }
.toTypedArray()
}
@Keep
fun logNonFatal(message: String, throwable: Throwable) {
Crashlytics.logException(NonFatalException(message, CompositeException(throwable, BreadcrumbException())))
}

它可以像这样使用:

observable
.doOnError { logNonFatal("Someone stuck in the thermosiphon", it) }
.subscribe()

您将获得按调用logNonFatal的行分组的报告,而不是按创建异常的根本原因it分组。

最新更新