如何记录 rxJava2 的所有异常的堆栈跟踪?
How to log a stacktrace of all exceptions of rxJava2?
我们需要一个全局处理程序来处理 rxJava2 传递给任何订阅者的 onError 的异常,以仅记录系统任何部分发生的堆栈跟踪。
在 first 版本的 rxJava 中,有一个 RxJavaHooks.setOnError
方法可以完成这件事。
RxJavaHooks.setOnError(throwable -> Log.w(TAG, "rx error", throwable));
但是在 rxJava2 中,class 被删除了,并且他们注意到逻辑已移至 RxJavaPlugins
class。它有一些相似的命名方法RxJavaPlugins.setErrorHandler
,但实际上调用的目的是完全不同的。它仅处理 无法交付 异常。
我如何记录所有异常,无论它是否被订阅者捕获?
我真的不想将记录器附加到系统中的每个特定可观察对象
Upd: 也许你有一些建议只针对 android 系统
没有简单的方法可以做到;您必须安装 onSubscribe
或 onAssembly
挂钩到所有主要的反应类型,然后以不会意外干扰内部优化的方式包装 Subscriber
s。
扩展项目有一个 assembly tracking debug feature,它在组装流程时捕获当前线程的堆栈跟踪,并将该信息附加到通过它的 onError
异常中(您实际需要)。
我们需要一个全局处理程序来处理 rxJava2 传递给任何订阅者的 onError 的异常,以仅记录系统任何部分发生的堆栈跟踪。
在 first 版本的 rxJava 中,有一个 RxJavaHooks.setOnError
方法可以完成这件事。
RxJavaHooks.setOnError(throwable -> Log.w(TAG, "rx error", throwable));
但是在 rxJava2 中,class 被删除了,并且他们注意到逻辑已移至 RxJavaPlugins
class。它有一些相似的命名方法RxJavaPlugins.setErrorHandler
,但实际上调用的目的是完全不同的。它仅处理 无法交付 异常。
我如何记录所有异常,无论它是否被订阅者捕获?
我真的不想将记录器附加到系统中的每个特定可观察对象
Upd: 也许你有一些建议只针对 android 系统
没有简单的方法可以做到;您必须安装 onSubscribe
或 onAssembly
挂钩到所有主要的反应类型,然后以不会意外干扰内部优化的方式包装 Subscriber
s。
扩展项目有一个 assembly tracking debug feature,它在组装流程时捕获当前线程的堆栈跟踪,并将该信息附加到通过它的 onError
异常中(您实际需要)。