Pytanie Sformatować komunikat wyjątku, aby zawierał cały stos w usłudze Google Analytics dla systemu Android?


Chciałbym mieć cały stacktrace w raporcie Google Analytic dla mojej aplikacji mobilnej.

Napisałem klasę, że print jest plikiem stacktrace i umieszczam go w łańcuchu, ale to nie działa.

Mój zwyczaj ExceptionParser:

@Override
public String getDescription(String threadName, Throwable throwable) {
    return threadName + " " + getStackTrace(throwable);
}

private String getStackTrace(Throwable throwable) {
    final Writer result = new StringWriter();
    final PrintWriter printWriter = new PrintWriter(result);
    throwable.printStackTrace(printWriter);

    return result.toString();
}

I ustawiłem to tak:

EasyTracker.getTracker().setExceptionParser(new StacktraceExceptionParser());

10
2017-11-29 15:36


pochodzenie


Nic nie wydaje się nie tak, co nie działa, czy możesz podać więcej informacji? - Nesim Razon
W rezultacie nie mam pełnego śledzenia stosu - zamiast tego mam tylko pierwszą linię wyjątku. - pixel
Spróbuj połączyć wewnętrzne podpowiedzi stosu, takie jak ten post: stackoverflow.com/a/1293282/912851 - Nesim Razon


Odpowiedzi:


Poniższa metoda łączy cały ślad stosu w pojedynczą linię oddzielaną przecinkami, co może pomóc w przypadku, gdy Analytics zwróci tylko pierwszą linię. Ale wciąż może istnieć ograniczenie długości, więc rozsądne może być filtrowanie w celu wyeliminowania rzeczy, których nie potrzebujesz (patrz komentarz)

 public String getCombinedStackTrace(Throwable aThrowable) {

    final StringBuilder result = new StringBuilder();
    result.append(aThrowable.toString());
    result.append(',');

    String oneElement;

    for (StackTraceElement element : aThrowable.getStackTrace() ) {
        // you can do some filtering here, selecting only the elements you need
        oneElement = element.toString();
        result.append( oneElement );
        result.append( ",");
    }
    return result.toString();
}

Po raz drugi komentarz Nikolay na temat korzystania z biblioteki raportowania błędów. Okazało się, że jest niesamowicie pomocny.


6
2017-12-08 04:56





Wiem, że ten wątek jest stary, ale próbuję wymyślić, jak to działa, ale tylko dla kompletności jest przydatna metoda w Log, która robi to, co chcesz

String stackTraceStr = Log.getStackTraceString(exception);

EDYCJA: W odpowiedzi na komentarz z limitem 100 znaków

Nigdy nie mogłem dostać EasyTracker.getTracker().setExceptionParser(...) działa, w rzeczywistości nie sądzę, że to działa, więc poszedłem za postem na blogu tutaj http://dandar3.blogspot.co.uk/2013/03/google-analytics-easytracker-detailed.html

Ważnym punktem posta na blogu jest upewnienie się, że ustawiłeś ExceptionParser na obsłudze wyjątku GA:

// Make sure you set the context on EasyTracker first
EasyTracker.getInstance().setContext(this);

// As in in the blog post, we have to get the ExceptionReporter
// in order to set the ExceptionParser
Thread.UncaughtExceptionHandler uncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
if (uncaughtExceptionHandler instanceof ExceptionReporter) {
  ExceptionReporter exceptionReporter = (ExceptionReporter) uncaughtExceptionHandler;
  exceptionReporter.setExceptionParser(new AnalyticsExceptionParser());
}

To działało dla mnie i loguje ponad 100 znaków.


6
2018-04-04 10:34



Niestety w Google Analytics jest limit 100 znaków, np. @Nikolay Elenkow. Skończyło się na używaniu Bugsense. - pixel
Mam to działa i nie widzę limitu 100 znaków, mam co najmniej 1024 zarejestrowane, mam zamiar zaktualizować moją odpowiedź, jak to działa. - Ian Warwick
Dostaję częściowo ślad stosu. To jest przed "spowodowane przez:" w ślad stosu. Po "spowodowane przez:" w stos śledzenia nie jest w stanie uzyskać. Czy możesz mi pomóc. Dziękujemy z góry - Sakthimuthiah
@IanWarwick Hi umieszczam wyjątek w metodzie onStop. Nie widzę więcej niż 100. Nie widzę całego logcat zamiast pierwszego wiersza. Czy możesz wysłać mi demo. Napisz do mnie: mmaidul.islam@gmail.com - Md Maidul Islam


Analytics może ograniczać rozmiar wiadomości, które możesz wysłać. Sugeruję użycie prawdziwej biblioteki zgłaszania błędów, jak ACRA lub BugSense zamiast. Otrzymasz dodatkowe funkcje, takie jak informacje o urządzeniu, szczegóły konfiguracji i lepsze raportowanie błędów (łączenie wielu wyjątków, jeśli mają ten sam ślad itp.).


4
2017-12-05 08:56



W rzeczywistości nie ma stwierdzenia o ograniczeniu w dokumentacji. Chciałbym użyć jednej biblioteki zamiast kilku. Dodatkowo w nowym Analytics masz funkcje takie jak łączenie wielu wyjątków, informacje o urządzeniu i tak dalej. Brakuje tylko pełnego stosu. Sugerowanie innych opcji nie jest odpowiedzią w tym przypadku :) - pixel
Fakt, że dokumentacja nie określa limitu, nie oznacza, że ​​go nie ma. Jestem jednak pewien, że zarówno ACRA, jak i BugSense działają lepiej w raportowaniu błędów niż w Analytics, co działa dobrze, ale w przypadku analiz :) Powinieneś przynajmniej wziąć je pod uwagę, niezależnie od tego, czy rozwiązujesz bieżący problem, czy nie. - Nikolay Elenkov