如何在原始堆栈跟踪的位置集中记录异常?

时间:2019-10-18 13:56:37

标签: java android firebase exception crashlytics

Android应用程序中的所有异常均通过一种全局方法记录,以将其记录在Firebase Crashlytics中。

public class L {
    public static void e(String message, Exception e) {
        Crashlytics.logException(e);
    }
}

问题在于,在Crashlytics中,异常按记录的位置分组。因此,所有记录的异常在Crashlytics中都显示为相同的异常。

enter image description here

换句话说,在堆栈跟踪中添加了另一行,它成为新的顶层,Crashlytics使用它来对异常进行分组。由于这些异常都被扔进了一个锅中,因此很难浏览和分析这些异常。

是否可以在不添加其他顶层的情况下记录原始异常?也许有一个回调,还是有一个更优雅的方法?

2 个答案:

答案 0 :(得分:0)

确实,Craslytics根据引发异常的顶层行将异常分组。

我建议您将呼叫移至Crashlytics.logException(e);,在其中调用原始Log.e(),这样就可以了

Crashlytics.logException(e);

Log.e(message, e);

您还可以使用

将其他信息记录到Crashlytics中
Crashlytics.log(priority, "YouTag", "YourMsg");

答案 1 :(得分:0)

实际上可以通过修改异常的堆栈跟踪。

Crashlytics记录异常的堆栈跟踪。堆栈跟踪设置为创建RuntimeException的位置。通过删除堆栈跟踪的顶部条目,Crashlytics会记录该异常,就像它被抛出到新的顶部堆栈条目一样。

public static e(@NonNull String message) {

    RuntimeException e = new RuntimeException(message);
    StackTraceElement[] s = Arrays.copyOfRange(e.getStackTrace(), 1, s.length);
    e.setStackTrace(s);
    Crashlytics.logException(e);
}