我们需要为任何订阅者的onError传递 rxJava2 异常的全局处理程序,只记录系统任何部分发生的堆栈跟踪。
在rxJava的第一个版本中,有一个RxJavaHooks.setOnError
方法可以完成这个任务。
RxJavaHooks.setOnError(throwable -> Log.w(TAG, "rx error", throwable));
但是在rxJava2中该类被删除了,因为他们注意到逻辑已经移到了RxJavaPlugins
类。它有一些类似的命名方法RxJavaPlugins.setErrorHandler
,但实际上调用的目的是完全不同的。它仅处理无法投递例外。
如何记录订阅者捕获的所有异常?
我真的不想将记录器附加到系统中的每个特定的observable
Upd :也许你只对android系统有一些建议
答案 0 :(得分:1)
没有简单的方法可以做到;您必须为所有主要的被动类型安装onSubscribe
或onAssembly
挂钩,然后以不会意外干扰内部优化的方式包装Subscriber
。
扩展项目有一个assembly tracking debug feature,它可以在汇集流时捕获当前线程的堆栈跟踪,并将该信息附加到通过它的onError
异常中(实际需要它)。