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)
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库的要求。