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

时间:2012-03-01 21:27:01

标签: android

我查看了the documentation for android.util.Log,我不确定Log.e()Log.wtf()之间究竟有什么区别。一个比另一个更受欢迎吗?有功能差异吗?当然,他们并不多余。

对未来读者的注意:在提出这个问题的时候,这方面的文档不太清楚。如果您按照上面的链接,他们已经解决了问题。

7 个答案:

答案 0 :(得分:91)

严重程度不同;

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

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

答案 1 :(得分:6)

Log.e()只是将日志记录到日志中,优先级为ERROR。

Log.wtf()(多么可怕的失败)比错误日志更严重。永远不会发生的错误。在终止程序之前,它可能会强制设备保留以写入日志。

答案 2 :(得分:2)

与其他日志记录类型一样,我理解它只是日志消息的另一种标签类型。 log.i用于提供有关事物发生位置的信息。 log.e用于可能发生的错误。 log.wtf用于从未发生过的错误。我认为这只是一种方便,所以你没有像Log(“ERROR:”,“一个错误”)和Log(“INFO:”,“信息”)

这样的东西。

答案 3 :(得分:2)

实际上,这可能是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);
}

答案 4 :(得分:2)

Log.wtf()Log.e()非常相似,但Log.wtf()通常用于超意外情况。

此外Log.e()日志的优先级为ERROR。但是,在Log.wtf()错误的情况下,将始终使用调用堆栈在ASSERT级别记录错误。

起初,我认为这是一个笑话,但它是: https://developer.android.com/reference/android/util/Log.html

爱上Android的另一个理由< 3

答案 5 :(得分:1)

我认为wtf(可怕的失败)用于报告应用程序的严重异常/问题(例如在调试控制台中报告)。

log.e用于报告错误,但没有那么严重。

答案 6 :(得分:0)

直到从事ROM层工作之前,我都不知道这一点。

如果设置了某些条件,

Log.wtf()将终止您的进程。我对为什么系统服务一直崩溃感到非常困惑。那是我使用Log.wtf(),并且因为“永远不应该发生的事情”而被解雇