Wie unterscheidet sich Log.wtf() von Log.e()?

Lesezeit: 5 Minuten

Benutzer-Avatar
Gobernador

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)

    – Herr Wasdennoch

    30. März 2016 um 19:41 Uhr


  • Die Domain zeigt jetzt auf https://www.reddit.com/r/mAndroidDev/

    – Ashutosh Singh

    24. März 2021 um 20:47 Uhr

Benutzer-Avatar
Safak Özdek

HÄUFIGER FEHLER

Offizielle Dokumente sagen:

Log.e() Protokolle mit Priorität ERROR. Jedoch, Log.wtf() Protokolle mit Priorität ASSERT.

ASSERT hat Prioritätskonstante = 7
ERROR hat Prioritätskonstante = 6

So Log.wtf() hat eine höhere Priorität gegenüber Log.e()

Jedoch Quellcode Konflikte mit obigen Angaben.

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.

Benutzer-Avatar
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.

Benutzer-Avatar
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

Benutzer-Avatar
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

Benutzer-Avatar
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”.

1282970cookie-checkWie unterscheidet sich Log.wtf() von Log.e()?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy