如何Log.wtf()从Log.e)不同(?

问题描述 投票:63回答:7

我已经看过the documentation for android.util.Log和我不知道Log.e()Log.wtf()之间的区别到底是什么。是优于其他?有没有功能差异?当然,他们不是多余的。

注意未来的读者:在这个问题被问的时候,这个文件是更加不明朗。如果你按照上面的链接,他们已经解决了这一问题。

android
7个回答
93
投票

有严重程度的差异;

Log.e()将只需登录一个错误日志优先错误。

Log.wtf()将记录与优先级断言错误,并可能(视系统配置)发送错误报告,并立即终止程序。


5
投票

Log.e()是简单地优先记录错误到日志中的错误。

Log.wtf()(多么可怕的失败)比错误日志更加严重。它永远不,曾经发生的错误。这可能会迫使该设备保持写日志之前终止程序。


3
投票

Log.wtf()很像Log.e()然而Log.wtf()一般用于超意外情况。

此外Log.e()优先错误日志。然而,在Log.wtf()错误的情况下总是会在与调用堆栈水平ASSERT记录。

起初,我以为这是一个玩笑,但它就在那里:https://developer.android.com/reference/android/util/Log.html

一个理由爱的Android <3


2
投票

至于其他类型的日志记录,我的理解是只为日志消息另一种标签类型。 log.i是哪里的东西正在发生的信息。 log.e是可能发生的错误。 log.wtf是从未发生过的错误。我认为这只是一个convienience所以你不必像日志(“ERROR”,“错误”)和日志(“INFO”,“信息”)


2
投票

其实,这可能是在Android SDK中文档错误,一个惊喜......医生说:

错误总是会在与调用堆栈水平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()都具有相同的优先级,错误。

不同的是,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);
}

1
投票

我认为,跆拳道(什么可怕的失败),用于报告应用程序的严重异常/问题(例如,在您的调试控制台报告它们)。

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


0
投票

我不知道这一点,直到我工作的ROM层。

如果某些条件设置Log.wtf()将终止您的进程。我为何系统服务崩溃了所有的时间很困惑。这是我用Log.wtf(),它是越来越的东西“是不应该发生的事情”炒鱿鱼关闭

© www.soinside.com 2019 - 2024. All rights reserved.