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

Android 如何通过正确的Crashlytics错误分组获得更好的RxJava堆栈跟踪,android,firebase,rx-java,rx-java2,crashlytics,Android,Firebase,Rx Java,Rx Java2,Crashlytics,我的目标是: 将RxJava链处理的错误记录到Firebase Crashlytics 获取一些合理的堆栈跟踪(也指向我的代码) 使Firebase Crashlytics错误分组正确完成(并非所有问题都分组为一个) 当前设置: 将错误监听器添加到rxjavasubscribe()并获取可丢弃的错误监听器 要获得更好的堆栈跟踪,请使用lib 使用Crashlytics.logException(t) 此设置的问题是Firebase Crashlytics将几乎所有错误分组在RxTrace

我的目标是:

  • 将RxJava链处理的错误记录到Firebase Crashlytics
  • 获取一些合理的堆栈跟踪(也指向我的代码)
  • 使Firebase Crashlytics错误分组正确完成(并非所有问题都分组为一个)
当前设置:

  • 将错误监听器添加到rxjava
    subscribe()
    并获取可丢弃的错误监听器
  • 要获得更好的堆栈跟踪,请使用lib
  • 使用
    Crashlytics.logException(t)
此设置的问题是Firebase Crashlytics将几乎所有错误分组在RxTracer
TracingObserver.java–第2行-com.halfhp.RxTracer.TracingObserver下。

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

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

正如我在中所说,Crashlytics是按照创建根本原因异常的方法和行对问题进行分组的

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

Crashlytics.logException(CompositeException(throwable, RuntimeException()))
上面将按代码片段的放置位置对Crashlytics问题进行分组,因为
运行时异常
将是记录的异常的根本原因

Crashlytics.logException(CompositeException(throwable, 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
异常的根本原因分组的报告。

看看这篇文章:这可能会否定RxTracer库的要求。