如何通过正确的Crashlytics错误分组获得更好的RxJava stacktrace

问题描述 投票:4回答:1

我的目标是:

  • 将RxJava链处理的错误记录到Firebase Crashlytics中
  • 获取一些明智的堆栈跟踪信息(也指向我的代码)
  • 正确完成Firebase Crashlytics错误分组(并非将所有问题分组为一个)

当前设置:

  • 将错误侦听器添加到rxjava subscribe()并抛出该异常
  • 要获得更好的堆栈跟踪,请使用RxTracer lib
  • 使用Crashlytics.logException(t)将可抛出的日志记录到Firebase Crashlytics中>
  • 使用此设置的问题是Firebase Crashlytics将RxTracer TracingObserver.java – line 2 - com.halfhp.rxtracer.TracingObserver.下的几乎所有错误归为一组>

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

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

[我的目标是:将RxJava链处理的错误记录到Firebase Crashlytics中。获取一些合理的堆栈跟踪信息(这也指向我的代码)使Firebase Crashlytics错误分组正确(并非全部...

)>

[就像我在another answer中所说的那样,Crashlytics正在按创建根本原因异常的方法和行将问题分组。

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

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

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

这样的功能可能会更有用:

import com.crashlytics.android.Crashlytics
import io.reactivex.exceptions.CompositeException

class NonFatalException(message: String) : RuntimeException(message)

@Suppress("NOTHING_TO_INLINE")
inline fun logNonFatal(message: String, throwable: Throwable) {
    Crashlytics.logException(CompositeException(throwable, NonFatalException(message)))
}

可以这样使用:

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

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

制作函数inline很重要,否则,只有一个问题指向logNonFatal的实现,它将所有记录的非致命事件分组。

内联函数的堆栈跟踪似乎指向调用logNonFatal的文件末尾的一行,但是您可以通过在IDE中使用Analyze Stack Trace...获得实际的调用位置。

android firebase rx-java rx-java2 crashlytics
1个回答
0
投票

[就像我在another answer中所说的那样,Crashlytics正在按创建根本原因异常的方法和行将问题分组。

© www.soinside.com 2019 - 2024. All rights reserved.