我查看 了 android.util.Log 的文档, 我不确定 Log.e()
和 Log.wtf()
之间到底有什么区别。一个比另一个更受欢迎吗?有功能差异吗?当然它们不是多余的。
_未来读者请注意_:在提出这个问题时,相关文档还不太清楚。如果您点击上面的链接,他们已经解决了问题。
原文由 gobernador 发布,翻译遵循 CC BY-SA 4.0 许可协议
我查看 了 android.util.Log 的文档, 我不确定 Log.e()
和 Log.wtf()
之间到底有什么区别。一个比另一个更受欢迎吗?有功能差异吗?当然它们不是多余的。
_未来读者请注意_:在提出这个问题时,相关文档还不太清楚。如果您点击上面的链接,他们已经解决了问题。
原文由 gobernador 发布,翻译遵循 CC BY-SA 4.0 许可协议
长话短说
Log.wtf() 可能会调用 onTerribleFailure() 并可能导致您的应用程序终止。
官方文档 说:
Log.e()
优先级为 ERROR 的日志。但是, Log.wtf()
优先级为 ASSERT 的日志。
ASSERT 的优先级常量 = 7
ERROR 的优先级常数 = 6
所以 Log.wtf()
相对于 Log.e()
但是 源代码 与上述信息 冲突。
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);
...
}
看起来官方文档中有 错误。因为 Log.wtf()
和 Log.e()
都记录优先级错误。
Log.e() 的源代码:
public static int e(@Nullable String tag, @Nullable String msg,@Nullable Throwable tr) {
return printlns(LOG_ID_MAIN, ERROR, tag, msg, tr);
}
不同之处在于 Log.wtf() 可能会调用 onTerribleFailure() 回调。
onTerribleFailure() 可能会也可能不会导致进程终止(取决于系统设置)。
原文由 Safak Ozdek 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答1.3k 阅读✓ 已解决
2 回答2.7k 阅读
2 回答1.7k 阅读
1 回答2.1k 阅读
1 回答1.2k 阅读
1 回答1.2k 阅读
1 回答584 阅读✓ 已解决
严重程度不同;
Log.e()
只会将错误记录到优先级为 ERROR 的日志中。Log.wtf()
将记录优先级为 ASSERT 的错误,并且可能(取决于系统配置)发送错误报告并立即终止程序。