我的目标是:
当前设置:
subscribe()
并获得可 throw Crashlytics.logException(t)
将 throwable 记录到 Firebase Crashlytics 此设置的问题是 Firebase Crashlytics 将几乎所有错误都归入 RxTracer
TracingObserver.java – line 2 - com.halfhp.rxtracer.TracingObserver.
下。我找不到将自定义分组等添加到 Firebase Crashlytics 的任何方法
你们如何向 Firebase Crashlytics 报告 RxJava 错误?
最佳答案
就像我在 another answer 中所说的那样, Crashlytics 按创建根本原因异常的方法和行对问题进行分组。CompositeException
上面链接的博客文章中提到的是一个很好的工具,可以实现两件事:让您的异常成为根本原因,同时保留原始异常的堆栈跟踪。
Crashlytics.logException(CompositeException(throwable, RuntimeException()))
以上将按您放置该 fragment 的位置对 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
的根本原因创建了异常。
关于android - 如何通过正确的 Crashlytics 错误分组获得更好的 RxJava 堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57659583/