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

Xen*_*pus 14 logging android android-emulator logcat

当我为我的android应用程序编写日志包装器时,我注意到了一个奇怪的机器人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));
Run Code Online (Sandbox Code Playgroud)

生成以下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
Run Code Online (Sandbox Code Playgroud)

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

Alt*_*her 13

如果您阅读有关Log.isLoggable()的信息,您会注意到默认的日志记录级别是INFO.任何小于(DEBUGVERBOSE)的东西都会导致此方法返回false.这就是您的结果输出显示这两个的原因false.

所有Log.*调用都记录在logcat中.调用Log.isLoggable()只是一种调整日志记录的方法.这不是必需的.通常,您将Log.isLoggable()在实际呼叫之前Log.*调用以确定是否记录它.

您可以根据需要调整日志记录TAG,使用prop文件或adb.关于这一点的好处是,您可以为TAG应用程序中的每个人动态地打开/关闭/关闭日志记录,而无需手动注释日志行或实施您自己的检查.


Nic*_*ong 6

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