Android应用程序中的所有异常均通过一种全局方法记录,以将其记录在Firebase Crashlytics中。
public class L {
public static void e(String message, Exception e) {
Crashlytics.logException(e);
}
}
问题在于,在Crashlytics中,异常按记录的位置分组。因此,所有记录的异常在Crashlytics中都显示为相同的异常。
换句话说,在堆栈跟踪中添加了另一行,它成为新的顶层,Crashlytics使用它来对异常进行分组。由于这些异常都被扔进了一个锅中,因此很难浏览和分析这些异常。
是否可以在不添加其他顶层的情况下记录原始异常?也许有一个回调,还是有一个更优雅的方法?
答案 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);
}