Frage

Ist es eine schlechte Idee, print () in Android Ausnahmen wie diese zu benutzen?

} catch (Exception e) {
    e.printStackTrace();
}
War es hilfreich?

Lösung

Ja, es ist eine schlechte Idee. Sie sollten stattdessen Android verwenden die integrierten Protokoll Klasse speziell für diese Zwecke: http: / /developer.android.com/reference/android/util/Log.html

Es gibt Ihnen Optionen Debug-Nachrichten zu protokollieren, Warnungen, Fehler, etc.

Protokollieren von Fehlern mit:

Log.e(TAG, "message", e), wo die Nachricht eine Erklärung sein kann, was versucht wurde, als die Ausnahme ausgelöst wurde

oder einfach Log.e(TAG, e) wenn Sie keine Nachricht für den Kontext schaffen, mögen

Sie können dann auf der Log-Konsole am unteren Rand klicken, während der Code ausgeführt wird und es leicht den TAG oder Protokollnachrichtentyp als Filter Suche mit

Andere Tipps

Ich glaube, das ist, was Sie brauchen:

catch (Exception e) {
     Log.e(TAG,Log.getStackTraceString(e)); 
}

Ja. printStackTrace() ist bequem, aber entmutigt, vor allem auf Android, wo es sichtbar durch logcat ist aber wird zu einem unbestimmten Niveau und ohne eine richtige Nachricht protokolliert. Stattdessen ist der richtige Weg, eine Ausnahme zu protokollieren ist ...

Log.e(TAG, "Explanation of what was being attempted", e);

Beachten Sie, dass die Ausnahme als dritter Parameter verwendet wird, nicht auf die Nachricht Parameter angehängt. Log Griffe die Details für Sie -. Drucken Sie Ihre Nachricht (die den Rahmen das, was geben Sie versuchen im Code zu tun) und die Botschaft des Exception sowie seinen Stack-Trace

Die Frage ist: ist bei jedem Druck auf den Stack-Trace in einem Andriod Anwendungskontext sinnvoll? Wird die Standardausgabe zur Laufzeit sichtbar sein? Will jemand kümmert sich um sie?

Mein Punkt ist, dass, wenn niemand die Standardausgabe überprüfen wird und Pflege um den Fehler zu debuggen, ist der Aufruf dieser Methode totem Code und Zusammensetzen der Stacktrace Nachricht ist ein wertlos Kosten. Wenn Sie es für das Debuggen bei Entwicklung nur benötigen, könnten Sie eine accesible globale Konstante gesetzt, und überprüfen Sie es zur Laufzeit:

} catch (Exception e) {
   if(com.foo.MyEnvironmentConstants.isDebugging()) {
      e.printStackTrace();
   } //else do noting
}

Ich möchte vermeiden, printStackTrace() verwenden, verwenden Sie eine Logging-System und seine Unterstützung von Ausnahmen.

log.log(Level.SEVERE, "Uncaught exception", e);

Also, wenn Sie ändern möchten, wie die Protokollierung gehandhabt wird es viel einfacher ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top