habe ich angeschaut die Dokumentation für android.util.Log und ich bin mir nicht sicher, was genau der Unterschied zwischen ist Log.e() und Log.wtf() ist. Wird das eine dem anderen vorgezogen? Gibt es einen Funktionsunterschied? Überflüssig sind sie sicher nicht.
Hinweis für zukünftige Leser: Als diese Frage gestellt wurde, war die Dokumentation dazu viel weniger klar. Wenn Sie dem obigen Link folgen, haben sie das Problem behoben.
Sieht aus wie nur ein Unterschied in der Schwere. Wtf ist ein Fehler, der sollte noch nie passieren..
– Mike Christensen
1. März 2012 um 21:30 Uhr
Die beste Antwort ist falsch, überprüfen Sie meine Antwort: stackoverflow.com/a/47314146/8695819
– Safak Özdek
18. September 2020 um 17:22 Uhr
Es gibt einen Unterschied in der Schwere;
Log.e() protokolliert einfach einen Fehler im Protokoll mit der Priorität ERROR.
Log.wtf() protokolliert einen Fehler mit der Prioritätsstufe ASSERT und kann (je nach Systemkonfiguration) einen Fehlerbericht senden und das Programm sofort beenden.
In den API-Dokumenten wird sehr deutlich gemacht, dass WTF in diesem Fall für “What a Terrible Failure” steht. Ich kann mir nicht vorstellen, wofür es sonst stehen könnte… developer.android.com/reference/android/util/Log.html
– Carlo P
13. März 2012 um 21:06 Uhr
Es ist auch eine Domain, die anscheinend zu Google weiterleitet. Haha
– TheRealChx101
26. September 2015 um 22:17 Uhr
Ich habe keine Ahnung, warum jemand dies in die URL-Leiste einfügen sollte, aber @chx101 tat es. (Es zeigt nur einen 404-Fehler im Google-Stil)
– Herr Wasdennoch
30. März 2016 um 19:15 Uhr
Eigentlich ist diese Domain nicht von Google registriert, sie zeigt nur die 404-Seite von Google. Es wurde am 23. Juli 2015 registriert (Referenz: Whois-Bericht)
static int wtf(int logId, String tag, String msg, Throwable tr,boolean localStack, boolean system) {
TerribleFailure what = new TerribleFailure(msg, tr);
// Only mark this as ERROR, do not use ASSERT since that should be
// reserved for cases where the system is guaranteed to abort.
// The onTerribleFailure call does not always cause a crash.
int bytes = printlns(logId, ERROR, tag, msg, localStack ? what : tr);
...
}
Es sieht so aus, als gäbe es eine Fehler in Offizielle Dokumente. Denn beides Log.wtf() und Log.e() Protokolle mit Priorität ERROR.
ECHTER UNTERSCHIED
Quellcode für Log.e():
public static int e(@Nullable String tag, @Nullable String msg,@Nullable Throwable tr) {
return printlns(LOG_ID_MAIN, ERROR, tag, msg, tr);
}
Der Unterschied besteht darin, dass Log.wtf() möglicherweise einen onTerribleFailure()-Rückruf aufruft.
onTerribleFailure() kann oder kann nicht dazu führen, dass der Prozess beendet wird (abhängig von den Systemeinstellungen).
TL;DR
Log.wtf() ruft möglicherweise onTerribleFailure() auf und kann zur Beendigung Ihrer Anwendung führen.
Sourav Kumar Verma
Log.e() ist das einfach einen Fehler im Log mit Priorität als ERROR zu protokollieren.
Log.wtf() (Was für ein schrecklicher Fehler) ist schwerwiegender als das Fehlerprotokoll. Der Fehler, der nie, nie, nie passiert ist. Es kann das Gerät dazu zwingen, das Schreiben der Protokolle zu warten, bevor das Programm beendet wird.
Paul Wang
Eigentlich könnte dies ein Dokumentationsfehler im Android SDK sein, was für eine Überraschung … Doc sagt:
Der Fehler wird immer auf der Ebene ASSERT mit dem Call-Stack protokolliert.
Aber der Quellcode sagt Folgendes:
static int wtf(int logId, String tag, String msg, Throwable tr, boolean localStack, boolean system) {
...
int bytes = printlns(logId, ERROR, tag, msg, localStack ? what : tr);
...
}
Also haben Log.wtf() und Log.e() beide die gleiche Priorität, ERROR.
Der Unterschied besteht darin, dass Log.wtf() den onTerribleFailure()-Rückruf aufruft, der „einen schwerwiegenden Fehler im aktuellen Prozess meldet. Kann oder kann nicht dazu führen, dass der Prozess beendet wird (abhängig von den Systemeinstellungen).“
Mit anderen Worten, Log.wtf() könnte Ihre App zum Absturz bringen.
Unten ist ein Code-Snippet:
if (ActivityManager.getService().handleApplicationWtf(
mApplicationObject, tag, system,
new ApplicationErrorReport.ParcelableCrashInfo
// The Activity Manager has already written us off -- now exit.
Process.killProcess(Process.myPid());
System.exit(10);
}
Wie bei den anderen Logging-Typen verstehe ich es nur als einen weiteren Label-Typ für Log-Meldungen. log.i ist für Informationen darüber, wo etwas passiert. log.e ist für Fehler, die passieren könnten. log.wtf ist für Fehler, die nie passieren. Ich denke, es ist nur eine Annehmlichkeit, damit Sie so etwas wie Log (“ERROR:”, “an error”) und Log (“INFO: “, “information”) nicht haben
Es sollte nie einen Fehler geben, der nie passiert – zumindest nicht in der Berufswelt. Jede Fehlermöglichkeit sollte zumindest protokolliert und eingeplant werden.
– Benutzer1499731
22. August 2012 um 14:44 Uhr
@user1499731 Wenn wir jede einzelne Möglichkeit planen und darauf vorbereitet sein könnten, bräuchten wir überhaupt keine Fehlermeldungen.
– forresthopkinsa
5. April 2017 um 22:53 Uhr
Bedo
Ich denke, dass wtf (was für ein schrecklicher Fehler) verwendet wird, um schwerwiegende Ausnahmen/Probleme Ihrer Anwendungen zu melden (zB melden Sie sie in Ihrer Debug-Konsole).
log.e wird verwendet, um Fehler zu melden, aber nicht so ernst.
Es sollte nie einen Fehler geben, der nie passiert – zumindest nicht in der Berufswelt. Jede Fehlermöglichkeit sollte zumindest protokolliert und eingeplant werden.
– Benutzer1499731
22. August 2012 um 14:44 Uhr
@user1499731 Wenn wir jede einzelne Möglichkeit planen und darauf vorbereitet sein könnten, bräuchten wir überhaupt keine Fehlermeldungen.
– forresthopkinsa
5. April 2017 um 22:53 Uhr
Joe Plant
Ich wusste das nicht, bis ich an der ROM-Schicht gearbeitet habe.
Log.wtf() beendet Ihren Prozess, wenn bestimmte Bedingungen gesetzt sind. Ich war ziemlich verwirrt darüber, warum der Systemdienst die ganze Zeit abstürzte. Es war, dass ich Log.wtf() verwendet habe und es wegen etwas abgefeuert wurde, “das niemals passieren sollte”.
12829700cookie-checkWie unterscheidet sich Log.wtf() von Log.e()?yes
This website is using cookies to improve the user-friendliness. You agree by using the website further.
Sieht aus wie nur ein Unterschied in der Schwere. Wtf ist ein Fehler, der sollte noch nie passieren..
– Mike Christensen
1. März 2012 um 21:30 Uhr
Die beste Antwort ist falsch, überprüfen Sie meine Antwort: stackoverflow.com/a/47314146/8695819
– Safak Özdek
18. September 2020 um 17:22 Uhr