Отчет о сбое Google Analytics показывает только первую строку трассировки стека
Мое приложение использует Google Analytics для отслеживания исключений и сбоев (среди прочих). Я использую эту функцию, чтобы получить трассировку стека:
public static void sendErrorReportViaGoogleAnalytics(Exception e) {
e.printStackTrace();
Tracker myTracker = EasyTracker.getTracker();
myTracker.sendException(getDescription(e), false);
}
public static String getDescription(Exception t) {
final StringBuilder result = new StringBuilder();
result.append(t.toString());
result.append(',');
String oneElement;
for (StackTraceElement element : t.getStackTrace()) {
oneElement = element.toString();
result.append(oneElement);
result.append(",");
}
return result.toString();
}
Это работает нормально, когда я говорю об исключениях, я просто вызываю sendErrorReportViaGoogleAnalytics() в части catch моих кодов обработки исключений, но когда дело доходит до сбоев, я получаю только одну строку трассировки стека, как
Binary XML file line #11: Error inflating class fragment
Я поставил
<bool name="ga_reportUncaughtExceptions">true</bool>
в analytics.xml, так как я использую EasyTracker.
Что я должен сделать, чтобы получить полную трассировку стека также в случае сбоев?
2 ответа
Поскольку вы не описали то, что на самом деле сделали, чтобы отследить сбои, я могу отправить вас только в документы: https://developers.google.com/analytics/devguides/collection/android/v2/exceptions
Если вы используете EasyTracker, вы можете объявить:
<bool name="ga_reportUncaughtExceptions">true</bool>
в противном случае вы можете реализовать класс ExceptionReporter, как описано, и присоединить его к вашему потоку.
Просто столкнулся с этой проблемой. Просто вставьте данный код в метод BaseApplication.onCreate() вашего проекта или в другое место, чтобы установить пользовательский ExceptionReporter для необработанных исключений. И не забудьте объявить данный флаг в analytics.xml.
<bool name="ga_reportUncaughtExceptions">true</bool>
Нестандартный репортер исключений:
ExceptionReporter myHandler =
new ExceptionReporter(EasyTracker.getInstance(this), GAServiceManager.getInstance(),
Thread.getDefaultUncaughtExceptionHandler(), this);
StandardExceptionParser exceptionParser =
new StandardExceptionParser(getApplicationContext(), null) {
@Override
public String getDescription(String threadName, Throwable t) {
return "{" + threadName + "} " + Log.getStackTraceString(t);
}
};
myHandler.setExceptionParser(exceptionParser);
// Make myHandler the new default uncaught exception handler.
Thread.setDefaultUncaughtExceptionHandler(myHandler);