Чем отличается Log.wtf() от Log.e()?

Я просмотрел документацию для android.util.Log, и я точно не знаю, в чем разница между Log.e() и Log.wtf() есть. Один из них предпочтительнее другого? Есть ли разница в функциональности? Разумеется, они не являются излишними.

Примечание для будущих читателей: на тот момент, когда этот вопрос был задан, документация для этого была гораздо менее ясной. Если вы перейдете по ссылке выше, они устранили проблему.

Ответ 1

Существует разница в степени тяжести;

Log.e() будет просто записывать ошибку в журнал с приоритетом ERROR.

Log.wtf() будет регистрировать ошибку с ASSERT уровня приоритета и может (в зависимости от конфигурации системы) отправлять отчет об ошибке и немедленно завершать программу.

Ответ 2

Log.e() - это просто журнал ошибок в журнале с приоритетом как ERROR.

Log.wtf() (Какой ужасный провал) более серьезный, чем журнал ошибок. Ошибка, которая никогда не случалась никогда. Это может вынудить устройство удерживать для записи журналов до завершения программы.

Ответ 3

Как и другие типы ведения журналов, я понимаю, что это просто другой тип метки для сообщений журнала. log.i - это информация о том, где что-то происходит. log.e для ошибок, которые могут произойти. log.wtf для ошибок, которые никогда не случаются. Я думаю, что это просто убежденность, поэтому у вас нет чего-то вроде Log ( "ERROR:", "error" ) и Log ( "INFO:", "информация" )

Ответ 4

Собственно, это может быть ошибка документации в Android SDK, что удивительно... Doc говорит:

Ошибка всегда регистрируется на уровне ASSERT с помощью стека вызовов.

Но исходный код говорит следующее:

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

    ...
}

Итак, Log.wtf() и Log.e() имеют одинаковый приоритет, ERROR.

Разница в том, что Log.wtf() вызывает обратный вызов onTerribleFailure(), который "Сообщить о серьезной ошибке в текущем процессе. Может или не может привести к завершению процесса (зависит от настроек системы)".

Итак, другими словами, Log.wtf() может привести к краху вашего приложения.

Ниже приведен фрагмент кода:

if (ActivityManager.getService().handleApplicationWtf(
        mApplicationObject, tag, system,
        new ApplicationErrorReport.ParcelableCrashInfo(t))) {
  // The Activity Manager has already written us off -- now exit.
  Process.killProcess(Process.myPid());
  System.exit(10);
}

Ответ 5

Log.wtf() очень похож на Log.e() однако Log.wtf() обычно используется для Log.wtf() ситуаций.

Также Log.e() регистрирует с приоритетом ERROR. Однако в случае Log.wtf() ошибка всегда будет регистрироваться на уровне ASSERT со стеком вызовов.

Сначала я подумал, что это шутка, но вот она: https://developer.android.com/reference/android/util/Log.html

Еще одна причина любить Android <3

Ответ 6

Я думаю, что wtf (какой ужасный отказ) используется для сообщения о серьезных исключениях/проблемах ваших приложений (например, сообщать об этом в консоли отладки).

log.e используется для сообщения об ошибках, но не так серьезно.

Ответ 7

Я не знал этого, пока не работал над слоем ROM.

Log.wtf() завершит ваш процесс, если будут установлены определенные условия. Я был совершенно сбит с толку относительно того, почему системный сервис все время падал. Дело в том, что я использовал Log.wtf(), и меня уволили за то, что "этого никогда не должно случиться"