【问题标题】:Does Log.isLoggable returns wrong values?Log.isLoggable 是否返回错误值?
【发布时间】:2011-12-18 09:24:08
【问题描述】:

当我为我的 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

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

【问题讨论】:

    标签: android logging android-emulator logcat


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        如果您阅读Log.isLoggable() 上的信息,您会注意到默认的日志记录级别是INFO。小于这个值(DEBUGVERBOSE)将导致此方法返回false。这就是为什么您的结果输出将这两个显示为false

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

        如果您愿意,您可以根据 TAG 调整您的日志记录,可以使用 prop 文件或通过 adb。这样做的好处是您可以在您的应用程序中为每个 TAG 动态打开/关闭/关闭日志记录,而无需手动注释掉日志行或实施您自己的检查。

        【讨论】:

          【解决方案4】:

          你应该使用

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-12-26
            • 2018-08-04
            • 1970-01-01
            • 2020-02-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-02-03
            相关资源
            最近更新 更多