Log.wtf() 与 Log.e() 有何不同?

新手上路,请多包涵

我查看 了 android.util.Log 的文档, 我不确定 Log.e()Log.wtf() 之间到底有什么区别。一个比另一个更受欢迎吗?有功能差异吗?当然它们不是多余的。

_未来读者请注意_:在提出这个问题时,相关文档还不太清楚。如果您点击上面的链接,他们已经解决了问题。

原文由 gobernador 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 741
2 个回答

严重程度不同;

Log.e() 只会将错误记录到优先级为 ERROR 的日志中。

Log.wtf() 将记录优先级为 ASSERT 的错误,并且可能(取决于系统配置)发送错误报告并立即终止程序。

原文由 Joachim Isaksson 发布,翻译遵循 CC BY-SA 3.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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题