如何减少 ACRA 中的堆栈跟踪?
How to reduce stack trace in ACRA?
我正在使用 ACRA 从 Android 应用发送崩溃报告,一切正常。除了堆栈跟踪是巨大的这一事实。例如,一份报告可以包含大约 30000 个字符,如下所示:
{
"REPORT_ID": "bb7cef15-ffc0-4e58-ada2-0472a5c02939",
"APP_VERSION_CODE": 1,
"APP_VERSION_NAME": 1.8,
"PHONE_MODEL": "Nexus 5",
"ANDROID_VERSION": "6.0.1",
"STACK_TRACE": "io.reactivex.exceptions.CompositeException: 2 exceptions occurred. \n\tat io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated(ObservableObserveOn.java:276)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:172)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:252)\n\tat io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)\n\tat android.os.Handler.handleCallback(Handler.java:739)\n\tat android.os.Handler.dispatchMessage(Handler.java:95)\n\tat android.os.Looper.loop(Looper.java:148)\n\tat android.app.ActivityThread.main(ActivityThread.java:5417)\n\tat java.lang.reflect.Method.invoke(Native Method)\n\tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)\n\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)\n ComposedException 1 :\n\tandroid.nfc.TagLostException: Tag was lost.\n\t\tat android.nfc.TransceiveResult.getResponseOrThrow(TransceiveResult.java:48)\n\t\tat android.nfc.tech.BasicTagTechnology.transceive(BasicTagTechnology.java:151)\n\t\tat android.nfc.tech.IsoDep.transceive(IsoDep.java:172)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.transferCommand(BalancePresenter.java:119)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.transferCommandToCard(BalancePresenter.java:101)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.getNextUrlObservable(BalancePresenter.java:77)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.lambda$getFares$BalancePresenter(BalancePresenter.java:49)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter$$Lambda.apply(Unknown Source)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:121)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.tryEmit(ObservableFlatMap.java:262)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onNext(ObservableFlatMap.java:559)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\t\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.tryEmit(ObservableFlatMap.java:262)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onNext(ObservableFlatMap.java:559)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\t\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)\n\t\tat io.reactivex.internal.observers.DisposableLambdaObserver.onNext(DisposableLambdaObserver.java:58)\n\t\tat io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onNext(ObservableSubscribeOn.java:58)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\t\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)\n\t\tat io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452)\n\t\tat io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61)\n\t\tat io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52)\n\t\tat java.util.concurrent.FutureTask.run(FutureTask.java:237)\n\t\tat java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)\n\t\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)\n\t\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)\n\t\tat java.lang.Thread.run(Thread.java:818)\n\tCaused by: java.lang.RuntimeException: Duplicate found in causal chain so cropping to prevent loop ...\n\t\tat android.util.Log.getStackTraceString(Log.java:338)\n\t\tat android.util.Log.e(Log.java:243)\n\t\tat org.acra.log.AndroidLogDelegate.e(AndroidLogDelegate.java:56)\n\t\tat org.acra.ErrorReporter.uncaughtException(ErrorReporter.java:254)\n\t\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)\n\t\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)\n\t\tat io.reactivex.plugins.RxJavaPlugins.uncaught(RxJavaPlugins.java:411)\n\t\tat io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:365)\n\t\tat io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated(ObservableObserveOn.java:276)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:172)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:252)\n\t\tat io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)\n\t\tat android.os.Handler.handleCallback(Handler.java:739)\n\t\tat android.os.Handler.dispatchMessage(Handler.java:95)\n\t\tat android.os.Looper.loop(Looper.java:148)\n\t\tat android.app.ActivityThread.main(ActivityThread.java:5417)\n\t\tat java.lang.reflect.Method.invoke(Native Method)\n\t\tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)\n\t\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)\n ComposedException 2 :\n\tjava.lang.Exception: android.nfc.TagLostException: Tag was lost.\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.lambda$getFares$BalancePresenter(BalancePresenter.java:69)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter$$Lambda.accept(Unknown Source)\n\t\tat io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:74)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated(ObservableObserveOn.java:276)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:172)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:252)\n\t\tat io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)\n\t\tat android.os.Handler.handleCallback(Handler.java:739)\n\t\tat android.os.Handler.dispatchMessage(Handler.java:95)\n\t\tat android.os.Looper.loop(Looper.java:148)\n\t\tat android.app.ActivityThread.main(ActivityThread.java:5417)\n\t\tat java.lang.reflect.Method.invoke(Native Method)\n\t\tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)\n\t\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)\n\tCaused by: android.nfc.TagLostException: Tag was lost.\n\t\tat android.nfc.TransceiveResult.getResponseOrThrow(TransceiveResult.java:48)\n\t\tat android.nfc.tech.BasicTagTechnology.transceive(BasicTagTechnology.java:151)\n\t\tat android.nfc.tech.IsoDep.transceive(IsoDep.java:172)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.transferCommand(BalancePresenter.java:119)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.transferCommandToCard(BalancePresenter.java:101)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.getNextUrlObservable(BalancePresenter.java:77)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.lambda$getFares$BalancePresenter(BalancePresenter.java:49)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter$$Lambda.apply(Unknown Source)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:121)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.tryEmit(ObservableFlatMap.java:262)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onNext(ObservableFlatMap.java:559)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\t\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.tryEmit(ObservableFlatMap.java:262)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onNext(ObservableFlatMap.java:559)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\t\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)\n\t\tat io.reactivex.internal.observers.DisposableLambdaObserver.onNext(DisposableLambdaObserver.java:58)\n\t\tat io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onNext(ObservableSubscribeOn.java:58)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\t\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)\n\t\tat io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452)\n\t\tat io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61)\n\t\tat io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52)\n\t\tat java.util.concurrent.FutureTask.run(FutureTask.java:237)\n\t\tat java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)\n\t\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)\n\t\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)\n\t\tat java.lang.Thread.run(Thread.java:818)\n\tCaused by: java.lang.RuntimeException: Duplicate found in causal chain so cropping to prevent loop ...\n\t\tat android.util.Log.getStackTraceString(Log.java:338)\n\t\tat android.util.Log.e(Log.java:243)\n\t\tat org.acra.log.AndroidLogDelegate.e(AndroidLogDelegate.java:56)\n\t\tat org.acra.ErrorReporter.uncaughtException(ErrorReporter.java:254)\n\t\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)\n\t\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)\n\t\tat io.reactivex.plugins.RxJavaPlugins.uncaught(RxJavaPlugins.java:411)\n\t\tat io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:365)\n\t\tat io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated(ObservableObserveOn.java:276)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:172)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:252)\n\t\tat io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)\n\t\tat android.os.Handler.handleCallback(Handler.java:739)\n\t\tat android.os.Handler.dispatchMessage(Handler.java:95)\n\t\tat android.os.Looper.loop(Looper.java:148)\n\t\tat android.app.ActivityThread.main(ActivityThread.java:5417)\n\t\tat java.lang.reflect.Method.invoke(Native Method)\n\t\tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)\n\t\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)\n\nio.reactivex.exceptions.CompositeException$CompositeExceptionCausalChain: Chain of Causes for CompositeException In Order Received =>\n\tat android.util.Log.getStackTraceString(Log.java:338)\n\tat android.util.Log.e(Log.java:243)\n\tat org.acra.log.AndroidLogDelegate.e(AndroidLogDelegate.java:56)\n\tat org.acra.ErrorReporter.uncaughtException(ErrorReporter.java:254)\n\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)\n\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)\n\tat io.reactivex.plugins.RxJavaPlugins.uncaught(RxJavaPlugins.java:411)\n\tat io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:365)\n\tat io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated(ObservableObserveOn.java:276)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:172)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:252)\n\tat io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)\n\tat android.os.Handler.handleCallback(Handler.java:739)\n\tat android.os.Handler.dispatchMessage(Handler.java:95)\n\tat android.os.Looper.loop(Looper.java:148)\n\tat android.app.ActivityThread.main(ActivityThread.java:5417)\n\tat java.lang.reflect.Method.invoke(Native Method)\n\tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)\n\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)\nCaused by: android.nfc.TagLostException: Tag was lost.\n\tat android.nfc.TransceiveResult.getResponseOrThrow(TransceiveResult.java:48)\n\tat android.nfc.tech.BasicTagTechnology.transceive(BasicTagTechnology.java:151)\n\tat android.nfc.tech.IsoDep.transceive(IsoDep.java:172)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter.transferCommand(BalancePresenter.java:119)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter.transferCommandToCard(BalancePresenter.java:101)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter.getNextUrlObservable(BalancePresenter.java:77)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter.lambda$getFares$BalancePresenter(BalancePresenter.java:49)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter$$Lambda.apply(Unknown Source)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:121)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.tryEmit(ObservableFlatMap.java:262)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onNext(ObservableFlatMap.java:559)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.tryEmit(ObservableFlatMap.java:262)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onNext(ObservableFlatMap.java:559)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)\n\tat io.reactivex.internal.observers.DisposableLambdaObserver.onNext(DisposableLambdaObserver.java:58)\n\tat io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onNext(ObservableSubscribeOn.java:58)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)\n\tat io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452)\n\tat io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61)\n\tat io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52)\n\tat java.util.concurrent.FutureTask.run(FutureTask.java:237)\n\tat java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)\n\tat java.lang.Thread.run(Thread.java:818)\nCaused by: java.lang.RuntimeException: Duplicate found in causal chain so cropping to prevent loop ...\n\tat android.util.Log.getStackTraceString(Log.java:338)\n\tat android.util.Log.e(Log.java:243)\n\tat org.acra.log.AndroidLogDelegate.e(AndroidLogDelegate.java:56)\n\tat org.acra.ErrorReporter.uncaughtException(ErrorReporter.java:254)\n\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)\n\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)\n\tat io.reactivex.plugins.RxJavaPlugins.uncaught(RxJavaPlugins.java:411)\n\tat io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:365)\n\tat io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated(ObservableObserveOn.java:276)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:172)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:252)\n\tat io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)\n\tat android.os.Handler.handleCallback(Handler.java:739)\n\tat android.os.Handler.dispatchMessage(Handler.java:95)\n\tat android.os.Looper.loop(Looper.java:148)\n\tat android.app.ActivityThread.main(ActivityThread.java:5417)\n\tat java.lang.reflect.Method.invoke(Native Method)\n\tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)\n\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)\nandroid.nfc.TagLostException: Tag was lost.\n\tat android.nfc.TransceiveResult.getResponseOrThrow(TransceiveResult.java:48)\n\tat android.nfc.tech.BasicTagTechnology.transceive(BasicTagTechnology.java:151)\n\tat android.nfc.tech.IsoDep.transceive(IsoDep.java:172)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter.transferCommand(BalancePresenter.java:119)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter.transferCommandToCard(BalancePresenter.java:101)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter.getNextUrlObservable(BalancePresenter.java:77)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter.lambda$getFares$BalancePresenter(BalancePresenter.java:49)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter$$Lambda.apply(Unknown Source)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:121)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.tryEmit(ObservableFlatMap.java:262)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onNext(ObservableFlatMap.java:559)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.tryEmit(ObservableFlatMap.java:262)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onNext(ObservableFlatMap.java:559)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)\n\tat io.reactivex.internal.observers.DisposableLambdaObserver.onNext(DisposableLambdaObserver.java:58)\n\tat io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onNext(ObservableSubscribeOn.java:58)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)\n\tat io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452)\n\tat io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61)\n\tat io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52)\n\tat java.util.concurrent.FutureTask.run(FutureTask.java:237)\n\tat java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)\n\tat java.lang.Thread.run(Thread.java:818)\nCaused by: java.lang.RuntimeException: Duplicate found in causal chain so cropping to prevent loop ...\n\tat android.util.Log.getStackTraceString(Log.java:338)\n\tat android.util.Log.e(Log.java:243)\n\tat org.acra.log.AndroidLogDelegate.e(AndroidLogDelegate.java:56)\n\tat org.acra.ErrorReporter.uncaughtException(ErrorReporter.java:254)\n\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)\n\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)\n\tat io.reactivex.plugins.RxJavaPlugins.uncaught(RxJavaPlugins.java:411)\n\tat io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:365)\n\tat io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated(ObservableObserveOn.java:276)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:172)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:252)\n\tat io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)\n\tat android.os.Handler.handleCallback(Handler.java:739)\n\tat android.os.Handler.dispatchMessage(Handler.java:95)\n\tat android.os.Looper.loop(Looper.java:148)\n\tat android.app.ActivityThread.main(ActivityThread.java:5417)\n\tat java.lang.reflect.Method.invoke(Native Method)\n\tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)\n\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)\njava.lang.RuntimeException: Duplicate found in causal chain so cropping to prevent loop ...\n\tat android.util.Log.getStackTraceString(Log.java:338)\n\tat android.util.Log.e(Log.java:243)\n\tat org.acra.log.AndroidLogDelegate.e(AndroidLogDelegate.java:56)\n\tat org.acra.ErrorReporter.uncaughtException(ErrorReporter.java:254)\n\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)\n\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)\n\tat io.reactivex.plugins.RxJavaPlugins.uncaught(RxJavaPlugins.java:411)\n\tat io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:365)\n\tat io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)\n\tat ...",
"USER_APP_START_DATE": "2017-10-24T18:17:42.006+03:00",
"USER_CRASH_DATE": "2017-10-24T18:17:44.713+03:00",
"IS_SILENT": false
}
我能以某种方式减少 "STACK_TRACE" 字段中的消息吗?例如,我可以从堆栈跟踪中只发送几行起始行吗?
创建自定义 ReportSender
(扩展其中一个默认项),并在发送前修改报告。
您可以使用 @ReportsCrashes.reportSenderFactoryClasses
注册自定义 ReportSender
我正在使用 ACRA 从 Android 应用发送崩溃报告,一切正常。除了堆栈跟踪是巨大的这一事实。例如,一份报告可以包含大约 30000 个字符,如下所示:
{
"REPORT_ID": "bb7cef15-ffc0-4e58-ada2-0472a5c02939",
"APP_VERSION_CODE": 1,
"APP_VERSION_NAME": 1.8,
"PHONE_MODEL": "Nexus 5",
"ANDROID_VERSION": "6.0.1",
"STACK_TRACE": "io.reactivex.exceptions.CompositeException: 2 exceptions occurred. \n\tat io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated(ObservableObserveOn.java:276)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:172)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:252)\n\tat io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)\n\tat android.os.Handler.handleCallback(Handler.java:739)\n\tat android.os.Handler.dispatchMessage(Handler.java:95)\n\tat android.os.Looper.loop(Looper.java:148)\n\tat android.app.ActivityThread.main(ActivityThread.java:5417)\n\tat java.lang.reflect.Method.invoke(Native Method)\n\tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)\n\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)\n ComposedException 1 :\n\tandroid.nfc.TagLostException: Tag was lost.\n\t\tat android.nfc.TransceiveResult.getResponseOrThrow(TransceiveResult.java:48)\n\t\tat android.nfc.tech.BasicTagTechnology.transceive(BasicTagTechnology.java:151)\n\t\tat android.nfc.tech.IsoDep.transceive(IsoDep.java:172)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.transferCommand(BalancePresenter.java:119)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.transferCommandToCard(BalancePresenter.java:101)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.getNextUrlObservable(BalancePresenter.java:77)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.lambda$getFares$BalancePresenter(BalancePresenter.java:49)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter$$Lambda.apply(Unknown Source)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:121)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.tryEmit(ObservableFlatMap.java:262)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onNext(ObservableFlatMap.java:559)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\t\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.tryEmit(ObservableFlatMap.java:262)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onNext(ObservableFlatMap.java:559)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\t\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)\n\t\tat io.reactivex.internal.observers.DisposableLambdaObserver.onNext(DisposableLambdaObserver.java:58)\n\t\tat io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onNext(ObservableSubscribeOn.java:58)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\t\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)\n\t\tat io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452)\n\t\tat io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61)\n\t\tat io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52)\n\t\tat java.util.concurrent.FutureTask.run(FutureTask.java:237)\n\t\tat java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)\n\t\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)\n\t\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)\n\t\tat java.lang.Thread.run(Thread.java:818)\n\tCaused by: java.lang.RuntimeException: Duplicate found in causal chain so cropping to prevent loop ...\n\t\tat android.util.Log.getStackTraceString(Log.java:338)\n\t\tat android.util.Log.e(Log.java:243)\n\t\tat org.acra.log.AndroidLogDelegate.e(AndroidLogDelegate.java:56)\n\t\tat org.acra.ErrorReporter.uncaughtException(ErrorReporter.java:254)\n\t\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)\n\t\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)\n\t\tat io.reactivex.plugins.RxJavaPlugins.uncaught(RxJavaPlugins.java:411)\n\t\tat io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:365)\n\t\tat io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated(ObservableObserveOn.java:276)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:172)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:252)\n\t\tat io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)\n\t\tat android.os.Handler.handleCallback(Handler.java:739)\n\t\tat android.os.Handler.dispatchMessage(Handler.java:95)\n\t\tat android.os.Looper.loop(Looper.java:148)\n\t\tat android.app.ActivityThread.main(ActivityThread.java:5417)\n\t\tat java.lang.reflect.Method.invoke(Native Method)\n\t\tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)\n\t\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)\n ComposedException 2 :\n\tjava.lang.Exception: android.nfc.TagLostException: Tag was lost.\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.lambda$getFares$BalancePresenter(BalancePresenter.java:69)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter$$Lambda.accept(Unknown Source)\n\t\tat io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:74)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated(ObservableObserveOn.java:276)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:172)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:252)\n\t\tat io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)\n\t\tat android.os.Handler.handleCallback(Handler.java:739)\n\t\tat android.os.Handler.dispatchMessage(Handler.java:95)\n\t\tat android.os.Looper.loop(Looper.java:148)\n\t\tat android.app.ActivityThread.main(ActivityThread.java:5417)\n\t\tat java.lang.reflect.Method.invoke(Native Method)\n\t\tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)\n\t\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)\n\tCaused by: android.nfc.TagLostException: Tag was lost.\n\t\tat android.nfc.TransceiveResult.getResponseOrThrow(TransceiveResult.java:48)\n\t\tat android.nfc.tech.BasicTagTechnology.transceive(BasicTagTechnology.java:151)\n\t\tat android.nfc.tech.IsoDep.transceive(IsoDep.java:172)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.transferCommand(BalancePresenter.java:119)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.transferCommandToCard(BalancePresenter.java:101)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.getNextUrlObservable(BalancePresenter.java:77)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter.lambda$getFares$BalancePresenter(BalancePresenter.java:49)\n\t\tat com.icard.ui.card.content.balance.impl.BalancePresenter$$Lambda.apply(Unknown Source)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:121)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.tryEmit(ObservableFlatMap.java:262)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onNext(ObservableFlatMap.java:559)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\t\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.tryEmit(ObservableFlatMap.java:262)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onNext(ObservableFlatMap.java:559)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\t\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)\n\t\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)\n\t\tat io.reactivex.internal.observers.DisposableLambdaObserver.onNext(DisposableLambdaObserver.java:58)\n\t\tat io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onNext(ObservableSubscribeOn.java:58)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\t\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\t\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\t\tat io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)\n\t\tat io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452)\n\t\tat io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61)\n\t\tat io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52)\n\t\tat java.util.concurrent.FutureTask.run(FutureTask.java:237)\n\t\tat java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)\n\t\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)\n\t\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)\n\t\tat java.lang.Thread.run(Thread.java:818)\n\tCaused by: java.lang.RuntimeException: Duplicate found in causal chain so cropping to prevent loop ...\n\t\tat android.util.Log.getStackTraceString(Log.java:338)\n\t\tat android.util.Log.e(Log.java:243)\n\t\tat org.acra.log.AndroidLogDelegate.e(AndroidLogDelegate.java:56)\n\t\tat org.acra.ErrorReporter.uncaughtException(ErrorReporter.java:254)\n\t\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)\n\t\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)\n\t\tat io.reactivex.plugins.RxJavaPlugins.uncaught(RxJavaPlugins.java:411)\n\t\tat io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:365)\n\t\tat io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated(ObservableObserveOn.java:276)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:172)\n\t\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:252)\n\t\tat io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)\n\t\tat android.os.Handler.handleCallback(Handler.java:739)\n\t\tat android.os.Handler.dispatchMessage(Handler.java:95)\n\t\tat android.os.Looper.loop(Looper.java:148)\n\t\tat android.app.ActivityThread.main(ActivityThread.java:5417)\n\t\tat java.lang.reflect.Method.invoke(Native Method)\n\t\tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)\n\t\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)\n\nio.reactivex.exceptions.CompositeException$CompositeExceptionCausalChain: Chain of Causes for CompositeException In Order Received =>\n\tat android.util.Log.getStackTraceString(Log.java:338)\n\tat android.util.Log.e(Log.java:243)\n\tat org.acra.log.AndroidLogDelegate.e(AndroidLogDelegate.java:56)\n\tat org.acra.ErrorReporter.uncaughtException(ErrorReporter.java:254)\n\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)\n\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)\n\tat io.reactivex.plugins.RxJavaPlugins.uncaught(RxJavaPlugins.java:411)\n\tat io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:365)\n\tat io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated(ObservableObserveOn.java:276)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:172)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:252)\n\tat io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)\n\tat android.os.Handler.handleCallback(Handler.java:739)\n\tat android.os.Handler.dispatchMessage(Handler.java:95)\n\tat android.os.Looper.loop(Looper.java:148)\n\tat android.app.ActivityThread.main(ActivityThread.java:5417)\n\tat java.lang.reflect.Method.invoke(Native Method)\n\tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)\n\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)\nCaused by: android.nfc.TagLostException: Tag was lost.\n\tat android.nfc.TransceiveResult.getResponseOrThrow(TransceiveResult.java:48)\n\tat android.nfc.tech.BasicTagTechnology.transceive(BasicTagTechnology.java:151)\n\tat android.nfc.tech.IsoDep.transceive(IsoDep.java:172)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter.transferCommand(BalancePresenter.java:119)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter.transferCommandToCard(BalancePresenter.java:101)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter.getNextUrlObservable(BalancePresenter.java:77)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter.lambda$getFares$BalancePresenter(BalancePresenter.java:49)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter$$Lambda.apply(Unknown Source)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:121)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.tryEmit(ObservableFlatMap.java:262)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onNext(ObservableFlatMap.java:559)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.tryEmit(ObservableFlatMap.java:262)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onNext(ObservableFlatMap.java:559)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)\n\tat io.reactivex.internal.observers.DisposableLambdaObserver.onNext(DisposableLambdaObserver.java:58)\n\tat io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onNext(ObservableSubscribeOn.java:58)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)\n\tat io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452)\n\tat io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61)\n\tat io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52)\n\tat java.util.concurrent.FutureTask.run(FutureTask.java:237)\n\tat java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)\n\tat java.lang.Thread.run(Thread.java:818)\nCaused by: java.lang.RuntimeException: Duplicate found in causal chain so cropping to prevent loop ...\n\tat android.util.Log.getStackTraceString(Log.java:338)\n\tat android.util.Log.e(Log.java:243)\n\tat org.acra.log.AndroidLogDelegate.e(AndroidLogDelegate.java:56)\n\tat org.acra.ErrorReporter.uncaughtException(ErrorReporter.java:254)\n\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)\n\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)\n\tat io.reactivex.plugins.RxJavaPlugins.uncaught(RxJavaPlugins.java:411)\n\tat io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:365)\n\tat io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated(ObservableObserveOn.java:276)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:172)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:252)\n\tat io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)\n\tat android.os.Handler.handleCallback(Handler.java:739)\n\tat android.os.Handler.dispatchMessage(Handler.java:95)\n\tat android.os.Looper.loop(Looper.java:148)\n\tat android.app.ActivityThread.main(ActivityThread.java:5417)\n\tat java.lang.reflect.Method.invoke(Native Method)\n\tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)\n\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)\nandroid.nfc.TagLostException: Tag was lost.\n\tat android.nfc.TransceiveResult.getResponseOrThrow(TransceiveResult.java:48)\n\tat android.nfc.tech.BasicTagTechnology.transceive(BasicTagTechnology.java:151)\n\tat android.nfc.tech.IsoDep.transceive(IsoDep.java:172)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter.transferCommand(BalancePresenter.java:119)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter.transferCommandToCard(BalancePresenter.java:101)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter.getNextUrlObservable(BalancePresenter.java:77)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter.lambda$getFares$BalancePresenter(BalancePresenter.java:49)\n\tat com.icard.ui.card.content.balance.impl.BalancePresenter$$Lambda.apply(Unknown Source)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:121)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.tryEmit(ObservableFlatMap.java:262)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onNext(ObservableFlatMap.java:559)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.tryEmit(ObservableFlatMap.java:262)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$InnerObserver.onNext(ObservableFlatMap.java:559)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.subscribeInner(ObservableFlatMap.java:162)\n\tat io.reactivex.internal.operators.observable.ObservableFlatMap$MergeObserver.onNext(ObservableFlatMap.java:139)\n\tat io.reactivex.internal.observers.DisposableLambdaObserver.onNext(DisposableLambdaObserver.java:58)\n\tat io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeOnObserver.onNext(ObservableSubscribeOn.java:58)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:51)\n\tat retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)\n\tat retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)\n\tat io.reactivex.Observable.subscribe(Observable.java:10842)\n\tat io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)\n\tat io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452)\n\tat io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61)\n\tat io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52)\n\tat java.util.concurrent.FutureTask.run(FutureTask.java:237)\n\tat java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)\n\tat java.lang.Thread.run(Thread.java:818)\nCaused by: java.lang.RuntimeException: Duplicate found in causal chain so cropping to prevent loop ...\n\tat android.util.Log.getStackTraceString(Log.java:338)\n\tat android.util.Log.e(Log.java:243)\n\tat org.acra.log.AndroidLogDelegate.e(AndroidLogDelegate.java:56)\n\tat org.acra.ErrorReporter.uncaughtException(ErrorReporter.java:254)\n\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)\n\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)\n\tat io.reactivex.plugins.RxJavaPlugins.uncaught(RxJavaPlugins.java:411)\n\tat io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:365)\n\tat io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated(ObservableObserveOn.java:276)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:172)\n\tat io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:252)\n\tat io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)\n\tat android.os.Handler.handleCallback(Handler.java:739)\n\tat android.os.Handler.dispatchMessage(Handler.java:95)\n\tat android.os.Looper.loop(Looper.java:148)\n\tat android.app.ActivityThread.main(ActivityThread.java:5417)\n\tat java.lang.reflect.Method.invoke(Native Method)\n\tat com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)\n\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)\njava.lang.RuntimeException: Duplicate found in causal chain so cropping to prevent loop ...\n\tat android.util.Log.getStackTraceString(Log.java:338)\n\tat android.util.Log.e(Log.java:243)\n\tat org.acra.log.AndroidLogDelegate.e(AndroidLogDelegate.java:56)\n\tat org.acra.ErrorReporter.uncaughtException(ErrorReporter.java:254)\n\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)\n\tat java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)\n\tat io.reactivex.plugins.RxJavaPlugins.uncaught(RxJavaPlugins.java:411)\n\tat io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:365)\n\tat io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)\n\tat ...",
"USER_APP_START_DATE": "2017-10-24T18:17:42.006+03:00",
"USER_CRASH_DATE": "2017-10-24T18:17:44.713+03:00",
"IS_SILENT": false
}
我能以某种方式减少 "STACK_TRACE" 字段中的消息吗?例如,我可以从堆栈跟踪中只发送几行起始行吗?
创建自定义 ReportSender
(扩展其中一个默认项),并在发送前修改报告。
您可以使用 @ReportsCrashes.reportSenderFactoryClasses
ReportSender