【问题标题】:How to get better RxJava stacktraces with correct Crashlytics error grouping如何通过正确的 Crashlytics 错误分组获得更好的 RxJava 堆栈跟踪
【发布时间】:2019-08-26 14:09:51
【问题描述】:

我的目标是:

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

当前设置:

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

此设置的问题是 Firebase Crashlytics 将几乎所有错误都归入 RxTracer TracingObserver.java – line 2 - com.halfhp.rxtracer.TracingObserver.

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

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

【问题讨论】:

标签: android firebase rx-java rx-java2 crashlytics


【解决方案1】:

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

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

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

以上将按您放置该 sn-p 的位置对 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 异常的根本原因的位置。

【讨论】:

    猜你喜欢
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    相关资源
    最近更新 更多