android.util.Log中的错误或功能?-Log.isLoggable(DEBUG)=false,但未禁用Log



更新:重新设置问题和标题:

我一直认为,昂贵的android日志记录方法可以通过询问日志记录是否像一样活跃来优化

    import android.util.Log;
    if (Log.isLoggable("MyContext", Log.DEBUG))
    {
        Log.d("MyContext", "my logging: " + callExpensiveCalculation());
    }

然而,当尝试使用android 2.2模拟器时,我的Log.d()从未被调用。

所以我尝试了这个代码

    Log.v(MY_CONTEXT, "VERBOSE logging is active: " + Log.isLoggable(MY_CONTEXT, Log.VERBOSE));
    Log.d(MY_CONTEXT, "DEBUG logging is active: " + Log.isLoggable(MY_CONTEXT, Log.DEBUG));
    Log.i(MY_CONTEXT, "INFO logging is active: " + Log.isLoggable(MY_CONTEXT, Log.INFO));
    Log.w(MY_CONTEXT, "WARN logging is active: " + Log.isLoggable(MY_CONTEXT, Log.WARN));
    Log.e(MY_CONTEXT, "ERROR logging is active: " + Log.isLoggable(MY_CONTEXT, Log.ERROR));

令我惊讶的是,我得到了

02-27 19:05:43.015: V/MyContext(334): VERBOSE logging is active: false
02-27 19:05:43.015: D/MyContext(334): DEBUG logging is active: false
02-27 19:05:43.015: I/MyContext(334): INFO logging is active: true
02-27 19:05:43.015: W/MyContext(334): WARN logging is active: true
02-27 19:05:43.015: E/MyContext(334): ERROR logging is active: true

因此,即使禁用了日志记录,日志记录也能工作。这是安卓系统中的错误还是我的测试代码中的错误?

是否有其他方法可以确定调试(或其他日志级别之一)是否处于活动状态?

我使用日志级别为verbose的eclipse logcat视图,并从eclipse开始测试,运行为android应用程序

isLoggable实际上只是一种为某些标记提供标志的机制,以方便您使用。它实际上对禁用日志记录没有任何作用。你的第一块代码是正确的:

if (Log.isLoggable("MyContext", Log.DEBUG))
{
    Log.d("MyContext", "my logging: " + callExpensiveCalculation());
}

这将记录或不记录,具体取决于isLoggable是返回true还是返回false。但是,当您这样做时(不检查isLoggable):

Log.d(MY_CONTEXT, "DEBUG logging is active: " + Log.isLoggable(MY_CONTEXT, Log.DEBUG));

无论调用isLoggable会返回什么,它都会进行日志记录。简而言之,如果您想基于该标志启用/禁用日志记录,需要在日志记录的所有地方进行检查。if语句允许您跳过不必要的日志。如果if子句是false,则内部的代码永远不会运行。

最新更新