如何记录rxJava2的所有异常的堆栈跟踪?

时间:2017-08-31 08:03:49

标签: java android rx-java2

我们需要为任何订阅者的onError传递 rxJava2 异常的全局处理程序,只记录系统任何部分发生的堆栈跟踪。
在rxJava的第一个版本中,有一个RxJavaHooks.setOnError方法可以完成这个任务。

RxJavaHooks.setOnError(throwable -> Log.w(TAG, "rx error", throwable));

但是在rxJava2中该类被删除了,因为他们注意到逻辑已经移到了RxJavaPlugins类。它有一些类似的命名方法RxJavaPlugins.setErrorHandler,但实际上调用的目的是完全不同的。它仅处理无法投递例外。 如何记录订阅者捕获的所有异常? 我真的不想将记录器附加到系统中的每个特定的observable Upd :也许你只对android系统有一些建议

1 个答案:

答案 0 :(得分:1)

没有简单的方法可以做到;您必须为所有主要的被动类型安装onSubscribeonAssembly挂钩,然后以不会意外干扰内部优化的方式包装Subscriber

扩展项目有一个assembly tracking debug feature,它可以在汇集流时捕获当前线程的堆栈跟踪,并将该信息附加到通过它的onError异常中(实际需要它)。