2013-04-16 5 views
6

Meine Anwendung verwendet Google Analytics, um Ausnahmen und Abstürze (unter anderem Thigs) zu verfolgen. Ich benutze diese Funktion, um die Stacktrace zu erhalten:google analytics crash report zeigt nur die erste Zeile von stacktrace

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(); 
} 

Dies funktioniert gut, wenn man über Ausnahmen reden, ich nenne nur sendErrorReportViaGoogleAnalytics() in dem Rastteil meiner Ausnahmebehandlung Codes, aber wenn es darum geht zu Abstürzen, ich nur erhalten eine Zeile des Stacktrace, wie

Binary XML file line #11: Error inflating class fragment 

stelle ich

<bool name="ga_reportUncaughtExceptions">true</bool> 

in analytics.xml, wie ich bin mit EasyTracker.

Was soll ich tun, um auch bei Abstürzen den vollen StackTrace zu bekommen?

+0

Ich will auch Abstürze in der Analytik verfolgen. AFIK ist es nur möglich, die ersten 200 Bytes zu verfolgen. Da ich den Tag-Manager verwende, kann ich die Eigenschaft in @ Raanans Antwort nicht verwenden. Weißt du mehr? – rekire

Antwort

3

Da Sie nicht beschreiben, was Sie, um tatsächlich tat die Abstürze zu fangen, dann kann ich Ihnen nur auf die Dokumente senden: https://developers.google.com/analytics/devguides/collection/android/v2/exceptions

Wenn Sie EasyTracker verwenden, können Sie erklären:

<bool name="ga_reportUncaughtExceptions">true</bool> 

Andernfalls können Sie die ExceptionReporter-Klasse wie beschrieben implementieren und an Ihren Thread anhängen.

+4

Vielen Dank für Ihre Antwort. Ich verwende true, um Ausnahmen zu verfolgen, aber dies protokolliert nur die erste Zeile der Stacktraces. – Analizer

+0

In der Verbindung überprüfen Sie die ExceptionParser Option, und das ist ein Duplikat mit einer Antwort (Abhilfe mit dem ExceptionParser): http://StackOverflow.com/Questions/14009883/Exception-Stack-Trace-Lost-in-Google-Analytics -v2-for-android – Raanan

+0

Vielen Dank Raanan, ich werde das überprüfen und so schnell wie möglich zu dir zurückkommen. – Analizer

4

Gerade mit diesem Problem konfrontiert. Fügen Sie den angegebenen Code einfach in die BaseApplication.onCreate() - Methode Ihres Projekts oder an eine andere Stelle ein, um den benutzerdefinierten ExceptionReporter für nicht abgefangene Ausnahmen festzulegen. Und vergessen Sie nicht, das angegebene Flag in analytics.xml zu deklarieren.

<bool name="ga_reportUncaughtExceptions">true</bool> 

Benutzerdefinierte abgefangene Ausnahmen Reporter:

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); 
+1

Wird dies nicht zu verdoppelten Berichten führen? Sollten Sie das Bool nicht auf false setzen, um dies zu vermeiden? –

+0

Noch haben Sie in analytics.xml diese Zeile: ' true' Und keine Duplikate in Berichten. – sky

+1

Für mich scheint es auch mit "false" zu funktionieren. Gibt es eine Chance, dass du das bestätigen kannst? –