处理Fabric / Crashlytics中的错误分组

时间:2018-02-22 11:50:29

标签: error-handling crashlytics crashlytics-android

我有一个使用Fabric / crashlytics的项目。为了能够检测生产中的所有运行时错误,我想使用以下方法向Crashlytics发送(非致命)异常:

Crashlytics.logException(new RuntimeException("some identifiable error message");

我想将此逻辑添加到项目中的现有Log-class中,该项目通过gradle作为单独的" utilities-module"加载。由于这个模块没有引用Crashlytics(我似乎无法找到从主模块转发此引用的好方法),所以我通过引入一个接口来解决它,从主要实现应用程序:

if (!BuildConfig.APP_BUILD_VERSION.equals("local")) {
        UtilitiesConfig.setExternalLogger(new Logger.ExternalLogger() {
            @Override
            public void reportError(String tag, String message, Throwable throwable) {
                Crashlytics.logException(new RuntimeException(TextUtils.isEmpty(tag) ? message : tag + ": " + message));
            }
        });
    }

这很好用,唯一的问题是Fabric中的所有报告都被归为一个类似的异常,因为堆栈跟踪的顶行是相似的(即接口和应用程序)。例如:

Non-fatal Exception: java.lang.RuntimeException: c: onNetworkError, type: CANT_ACCESS_SERVER
   at my.package.Application$3.reportError(Application.java:234)
   at my.package.utilities.Logger.e(Logger.java:34)
   at my.package.utilities.net.CallbackCallable.onNetworkError(CallbackCallable.java:76)
   at my.package.utilities.net.MsgCallable.onNetworkError(MsgCallable.java:250)
   at my.package.utilities.net.CancellableCallable.call(CancellableCallable.java:80)
   at java.util.concurrent.FutureTask.run(FutureTask.java:237)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
   at java.lang.Thread.run(Thread.java:776)

......而且这个:

Non-fatal Exception: java.lang.RuntimeException: u: Cannot update
   at my.package.Application$3.reportError(Application.java:234)
   at my.package.utilities.Logger.e(Logger.java:43)
   at my.package.NTPManager$SyncTimeAsyncTask.doInBackground(NTPManager.java:150)
   at my.package.NTPManager$SyncTimeAsyncTask.doInBackground(NTPManager.java:133)
   at android.os.AsyncTask$2.call(AsyncTask.java:304)
   at java.util.concurrent.FutureTask.run(FutureTask.java:237)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
   at java.lang.Thread.run(Thread.java:762)

都被组合在一起,尽管它们是来自不同类/行和不同错误消息的两个不同错误。

是否有一种有效的方法可以更改Crashlytics中的某些配置或通过另一种方式通过所述回调进行报告,从而使Fabric不会将它们视为同样的错误?

1 个答案:

答案 0 :(得分:1)

issues are grouped by the root cause of the exception起,如果您使用传递给throwable的{​​{1}}并将其设置为您创建的异常的reportError,则应该获得期望的结果。 / p>

cause