¿En qué se diferencia Log.wtf() de Log.e()?

5 minutos de lectura

avatar de usuario
gobernador

he mirado la documentación para android.util.Log y no estoy seguro exactamente cuál es la diferencia entre Log.e() y Log.wtf() es. ¿Se prefiere uno sobre el otro? ¿Hay alguna diferencia de funcionalidad? Seguramente no son redundantes.

Nota para futuros lectores: En el momento en que se hizo esta pregunta, la documentación para esto era mucho menos clara. Si sigues el enlace de arriba, han solucionado el problema.

  • Parece solo una diferencia en la gravedad. Wtf es un error que debería nunca suceder..

    –Mike Christensen

    01/03/2012 a las 21:30

  • La mejor respuesta es incorrecta, verifique mi respuesta: stackoverflow.com/a/47314146/8695819

    – Safak Özdek

    18 de septiembre de 2020 a las 17:22

Hay una diferencia en la severidad;

Log.e() simplemente registrará un error en el registro con prioridad ERROR.

Log.wtf() registrará un error con el nivel de prioridad ASSERT y puede (dependiendo de la configuración del sistema) enviar un informe de error y terminar el programa inmediatamente.

  • Está muy claro en los documentos de la API que significa WTF, en este caso para “What a Terrible Failure”. No puedo imaginar qué más podría significar… desarrollador.android.com/reference/android/util/Log.html

    – Carlos P.

    13 de marzo de 2012 a las 21:06

  • También es un dominio que aparentemente redirige a Google. ja ja

    – TheRealChx101

    26/09/2015 a las 22:17

  • No tengo idea de por qué alguien debería pegar esto en la barra de direcciones, pero @chx101 lo hizo. (Solo muestra un error 404 al estilo de Google)

    – Sr. Wasdennnoch

    30/03/2016 a las 19:15

  • En realidad, este dominio no está registrado por Google, solo muestra la página 404 de Google. Se registró el 23 de julio de 2015 (Referencia: informe whois)

    – Sr. Wasdennnoch

    30/03/2016 a las 19:41


  • El dominio ahora apunta a https://www.reddit.com/r/mAndroidDev/

    – Ashutosh Singh

    24/03/2021 a las 20:47

avatar de usuario
Safak Özdek

ERROR COMÚN

documentos oficiales decir:

Log.e() registros con prioridad ERROR. Sin embargo, Log.wtf() registros con prioridad ASSERT.

ASSERT tiene prioridad constante = 7
ERROR tiene prioridad constante = 6

Asi que Log.wtf() tiene mayor prioridad con respecto a Log.e()

Sin embargo código fuente conflictos con la información anterior.

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

Parece que hay un error en Documentos oficiales. porque ambos Log.wtf() y Log.e() registros con prioridad ERROR.

DIFERENCIA REAL

Código fuente para Log.e():

public static int e(@Nullable String tag, @Nullable String msg,@Nullable Throwable tr) {
    return printlns(LOG_ID_MAIN, ERROR, tag, msg, tr);
}

La diferencia es que Log.wtf() podría devolver la llamada a onTerribleFailure().

onTerribleFailure() puede o no causar que el proceso finalice (depende de la configuración del sistema).

TL;DR

Log.wtf() puede llamar a TerribleFailure() y puede causar la terminación de su aplicación.

avatar de usuario
Sourav Kumar Verma

Log.e() es simplemente registrar un error en el registro con prioridad como ERROR.

Log.wtf() (Qué terrible falla) es más grave que el registro de errores. El error que nunca jamás, jamás sucedió. Puede obligar al dispositivo a esperar para escribir los registros antes de finalizar el programa.

avatar de usuario
pablo wang

En realidad, esto podría ser un error de documentación en Android SDK, qué sorpresa… Doc dice:

El error siempre se registrará en el nivel ASSERT con la pila de llamadas.

Pero el código fuente dice esto:

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

    ...
}

Entonces, Log.wtf() y Log.e() tienen la misma prioridad, ERROR.

La diferencia es que Log.wtf() solicita la devolución de llamada de onTerribleFailure(), que “Informa de un error grave en el proceso actual. Puede o no hacer que el proceso finalice (depende de la configuración del sistema)”.

Entonces, en otras palabras, Log.wtf() podría bloquear su aplicación.

A continuación se muestra un fragmento de código:

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

Al igual que con los otros tipos de registro, entiendo que es solo otro tipo de etiqueta para los mensajes de registro. log.i es para obtener información sobre dónde está ocurriendo algo. log.e es para errores que podrían ocurrir. log.wtf es para errores que nunca ocurren. Creo que es solo una conveniencia para que no tenga algo como Log(“ERROR:”, “un error”) y Log(“INFO: “, “information”)

  • Nunca debería existir un error que nunca sucede, al menos no en un mundo profesional. Cada posibilidad de error debe al menos registrarse y planificarse.

    usuario1499731

    22 de agosto de 2012 a las 14:44

  • @user1499731 Si pudiéramos planificar y estar preparados para todas las posibilidades, nunca necesitaríamos mensajes de error.

    – forresthopkinsa

    5 abr 2017 a las 22:53

avatar de usuario
Bedo

Creo que wtf (qué falla tan terrible) se usa para reportar excepciones/problemas serios de sus aplicaciones (por ejemplo, reportarlos en su consola de depuración).

log.e se utiliza para informar errores, pero no tan graves.

  • Nunca debería existir un error que nunca sucede, al menos no en un mundo profesional. Cada posibilidad de error debe al menos registrarse y planificarse.

    usuario1499731

    22 de agosto de 2012 a las 14:44

  • @user1499731 Si pudiéramos planificar y estar preparados para todas las posibilidades, nunca necesitaríamos mensajes de error.

    – forresthopkinsa

    5 abr 2017 a las 22:53

avatar de usuario
joe plante

No sabía esto hasta que trabajé en la capa ROM.

Log.wtf() terminará su proceso si se establecen ciertas condiciones. Estaba bastante confundido sobre por qué el servicio del sistema fallaba todo el tiempo. Fue que usé Log.wtf() y fue despedido por algo “que nunca debería estar sucediendo”

¿Ha sido útil esta solución?