Log.wtf()与Log.e()有什么不同?

我已经看过了android.util.Log的文档 ,我不确定Log.e()Log.wtf()之间的区别是什么。 一个比另一个更受欢迎吗? 有没有function差异? 他们当然不是多余的。

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

严重程度有所不同,

Log.e()将简单地将错误logging到具有优先级ERROR的日志中。

Log.wtf()会logging一个优先级为ASSERT的错误,并可能(取决于系统configuration)发送错误报告并立即终止程序。

Log.e()是简单地将日志错误logging到日志中,优先级为ERROR。

Log.wtf() (可怕的失败)比错误日志更严重。 从来没有发生过的错误。 在终止程序之前,可能会强制设备保持写日志。

我认为wtf(可怕的失败)用于报告应用程序的严重exception/问题(例如,在debugging控制台中报告它们)。

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

和其他日志loggingtypes一样,我知道它只是日志消息的另一种标签types。 log.i是关于在哪里发生的信息。 log.e是可能发生的错误。 log.wtf是针对从未发生的错误。 我认为这只是一个快速的方式,所以你没有Log(“ERROR:”,“an error”)和Log(“INFO:”,“information”)

实际上,这可能是Android SDK中的一个文档错误,真是一个惊喜…… Doc说:

错误将始终以调用堆栈的级别ASSERTlogging。

但源代码说:

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()callback,其中“报告当前进程中有严重错误,可能会导致进程终止(取决于系统设置)。

换句话说,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); } 

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

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

还有一个理由来爱Android <3