Log.isLoggable是否返回错误的值?

时间:2011-10-30 22:05:33

标签: android logging android-emulator logcat

当我为我的android应用程序编写日志包装器时,我注意到了一个androids Log.isLoggable方法的奇怪行为。执行以下代码:

final String TAG = "Test";
Log.v(TAG, "verbose is active: " + Log.isLoggable(TAG, Log.VERBOSE));
Log.d(TAG, "debug is active: " + Log.isLoggable(TAG, Log.DEBUG));
Log.i(TAG, "info is active: " + Log.isLoggable(TAG, Log.INFO));
Log.w(TAG, "warn is active: " + Log.isLoggable(TAG, Log.WARN));
Log.e(TAG, "error is active: " + Log.isLoggable(TAG, Log.ERROR));

生成以下LogCat输出:

VERBOSE/Test(598): verbose is active: false
DEBUG/Test(598): debug is active: false
INFO/Test(598): info is active: true
WARN/Test(598): warn is active: true
ERROR/Test(598): error is active: true

虽然我使用详细和调试日志记录生成这些输出,但为什么我会得到详细信息并且调试无效?

4 个答案:

答案 0 :(得分:13)

如果您阅读Log.isLoggable()上的信息,您会发现默认日志记录级别为INFO。任何小于(DEBUGVERBOSE)的内容都会导致此方法返回false。这就是您的结果输出将这两个显示为false

的原因

所有Log.*次调用都会记录到logcat中。调用Log.isLoggable()只是一种调整日志记录的方法。这不是必需的。通常,您会在实际Log.isLoggable()来电之前致电Log.*以确定是否记录。

如果您选择,可以使用prop文件或通过adb调整每TAG的日志记录。关于这一点的好处是,您可以为应用程序中的每个TAG动态启用/关闭/关闭日志记录,而无需手动注释日志行或执行您自己的检查。

答案 1 :(得分:6)

无论当前日志级别是什么,所有日志级别都将写入logcat。 isLogabble()方法可用作应用程序的优化,以防止将不需要的日志语句发送到logcat。您还可以使用adb logcat命令过滤日志记录级别的子集,即使日志记录设置为详细(请参阅https://developer.android.com/studio/debug/am-logcat.html)。

答案 2 :(得分:2)

你应该使用

if (Log.isLoggable(TAG, Log.VERBOSE)) {
    Log.v(TAG, "verbose is active: " + Log.isLoggable(TAG, Log.VERBOSE));
}

答案 3 :(得分:0)

无论Log.isloggable()返回什么,LOG都将始终在logcat中打印。