Log.isLoggable返回错误的值吗?

14

当我为我的安卓应用编写日志包装器时,我注意到了安卓的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
为什么我使用verbose和debug记录输出,却没有看到详细的输出信息和调试信息?
4个回答

13
如果你阅读Log.isLoggable()的信息,你会发现默认的日志记录级别是INFO。任何低于此级别(如DEBUGVERBOSE)都会导致此方法返回false。这就是为什么您的输出结果显示这两个为false的原因。
所有Log.*调用都会被记录到logcat中。调用Log.isLoggable()只是一种调整日志记录的方式,不是必需的。通常,您将在实际调用Log.*之前调用Log.isLoggable()来确定是否记录它。
您可以根据需要通过prop文件或通过adb针对每个TAG调整日志记录级别。这样做的好处是您可以动态地为应用程序中的每个单独的TAG打开/关闭日志记录并调整其级别,而无需手动注释掉Log行或实施自己的检查。

6

无论当前日志级别是什么,所有日志级别都会被写入logcat。可以使用isLogabble()方法对您的应用程序进行优化,以防止向logcat发送不必要的日志语句。即使将日志设置为详细信息(参见https://developer.android.com/studio/debug/am-logcat.html),也可以使用adb logcat命令过滤一部分日志级别。


2

您应该使用

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

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接