Ich habe Firebase Crash in meine App integriert und einen benutzerdefinierten Uncaught Exception Handler erstellt, in dem ich den Status der nützlichen App protokolliere, bevor der Absturz gesendet wird. In der Firebase-Konsole sind die Protokolle jedoch erwartungsgemäß nicht neben der Ausnahme enthalten. Warum ist das der Fall? Wie stelle ich sicher, dass meine Logs immer gesendet werden?Firebase-Absturzprotokolle nicht gesendet
Unten ist eine abgespeckte Version der uncaughtException-Methode des Handlers.
public void uncaughtException(Thread thread, final Throwable ex) {
FirebaseCrash.logcat(Log.INFO, TAG, "App state");
FirebaseCrash.report(ex);
prior_handler.uncaughtException(thread, ex);
}
Wenn Firebase Crash installiert ist, müssen Sie report() nicht aufrufen, um etwas zu senden. Dies wird im UncaughtExceptionHandler passieren, den Firebase für sich selbst hinzufügt. Sie protokollieren Nachrichten einfach vor einem Absturz oder einem Aufruf an report(), und sie sollten an den Bericht unterhalb des Stack-Trace angehängt werden. Wir haben keine Beschwerden über fehlende Baumstämme gehört. –
@DougStevenson Danke für Ihre Antwort. Ich habe meinen eigenen UEHandler erstellt, weil ich im Fall von nicht abgefangenen Ausnahmen eine zusätzliche Protokollierung hinzufügen möchte, die ansonsten unnötig ist. Während des Debugging sehe ich, dass mein Handler (siehe Beispiel oben) aufgerufen wird und die Ausnahme in der Konsole, aber nicht im Protokoll angezeigt wird. Wenn ich keinen benutzerdefinierten Handler verwende, wie kann ich nur zusätzliche Protokolle "injizieren", wenn es eine nicht abgefangene Ausnahme gibt? – sidiabale
Ich würde erwarten, dass jedes Protokoll funktioniert, wenn es vor Firebases UEH aufgerufen wird. Ein mögliches Problem ist, dass Ihre UEH möglicherweise * vor * Firebase registriert wird. In diesem Fall wird Firebase bei einem Absturz zuerst vor Ihnen ausgeführt, und Ihr zusätzliches Protokoll wird nicht angezeigt. An welchem Punkt registrieren Sie Ihre? Firebase passiert während eines ContentProvider onCreate (was sehr früh ist). –