Как регистрировать исключение централизованно на месте исходной трассировки стека? - PullRequest
0 голосов
/ 18 октября 2019

Все исключения в приложении 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 голосов
/ 03 ноября 2019

На самом деле это возможно, изменив трассировку стека исключения.

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);
}
0 голосов
/ 18 октября 2019

Действительно, исключение групп Craslytics основано на строке верхнего уровня, где было сгенерировано исключение.

Я предлагаю вам переместить вызов на Crashlytics.logException(e);, где вы вызываете оригинальный Log.e (), так что вы 'Вы получите

Crashlytics.logException(e);

Log.e(message, e);

Вы также можете зарегистрировать дополнительную информацию в Crashlytics, используя

Crashlytics.log(priority, "YouTag", "YourMsg");
...