Android Log.X не печатает stacktrace
e.printStackTrace() работает отлично (т.е. выводит мой стек на stderr), но Log.X вообще не распечатывает стек.
Например:
} catch (IOException e) {
Log.e("Network", "Exception", e);
e.printStackTrace();
}
Вывод:
08-31 03:46:21.992: W/Network(13238): Exception
08-31 03:46:22.092: W/System.err(13238): java.net.UnknownHostException: Unable to resolve host "...": No address associated with hostname
08-31 03:46:22.204: W/System.err(13238): at java.net.InetAddress.lookupHostByName(InetAddress.java:394)
08-31 03:46:22.222: W/System.err(13238): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
08-31 03:46:22.222: W/System.err(13238): at java.net.InetAddress.getAllByName(InetAddress.java:214)
Ответы
Ответ 1
Выключает Android Log.getStackTraceString, который используется Log.X для проглатывания UnknownHostException.: (
От: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.2.2_r1/android/util/Log.java#Log.getStackTraceString%28java.lang.Throwable%29
public static String getStackTraceString(Throwable tr) {
if (tr == null) {
return "";
}
// This is to reduce the amount of log spew that apps do in the non-error
// condition of the network being unavailable.
Throwable t = tr;
while (t != null) {
if (t instanceof UnknownHostException) {
return "";
}
t = t.getCause();
}
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
tr.printStackTrace(pw);
return sw.toString();
}
Все это очень хорошо сокращает извержение журнала, но даже не говорит мне, что мое исключение было плохой joojoo!
Ответ 2
У меня также была такая проблема и я создал модуль Xposed для решения этой проблемы. См. Xposed для Android 8+ или Оригинальный Xposed для получения инструкций по установке. Позже я наткнулся на эту тему.
Вот проект: FullStackTrace
Существует также APK для загрузки до релизов.
Ваше устройство должно быть рутовано, чтобы иметь возможность использовать Xposed. Я использовал Magisk здесь.