【问题标题】:How to get slf4j-android to honor Logcat logging level?如何让 slf4j-android 遵守 Logcat 日志记录级别?
【发布时间】:2013-11-27 21:18:02
【问题描述】:

我通过 gradle/maven 使用 slf4j-android 1.6.1-RC1,当我在模拟器中运行应用程序时,当我调用 Log.debug 时,Android Studio 0.3.5 下的 Logcat 中没有任何结果。

只是为了好玩,我尝试了以下方法:

private final Logger Log = LoggerFactory.getLogger(MainActivity.class);
        ...
Log.debug("Got this far, woohoo!");
android.util.Log.d("blah","I am here!");

Log.d 的输出确实出现在 Logcat 中,但 Log.debug 没有。

我检查了 Log.isDebugEnabled() 并确定它设置为 false。但这似乎很奇怪,因为 android.util.Log.d 工作得很好。 slf4j 不应该使用相同的日志级别吗?事实上,slf4j 不应该只是在幕后调用 android.util.Log 吗?

我还用 Log.error 替换了 Log.debug 并且确实有效。所以问题似乎是 slf4j 以某种方式决定不应该发出调试事件,即使 Log.d 会发出它们。

我如何让 slf4j 像 android.util.Log 一样遵守在 Android Studio 中的 Logcat 中设置的日志级别?

【问题讨论】:

    标签: android logging slf4j


    【解决方案1】:

    如果您查看 slf4j-android 的源代码,您可以看到它调用 android.util.Log#isLoggable 来决定是否应该创建日志条目。 isLoggable 的 javadoc 说(我的重点):

    检查指定标签的日志是否可记录 在规定的水平。 任何标签的默认级别都设置为 INFO。 这意味着将记录任何高于并包括 INFO 的级别。 在您对记录方法进行任何调用之前,您应该检查以查看 如果您的标签应该被记录。您可以通过以下方式更改默认级别 设置系统属性:'setprop log.tag。 ' 其中 level 是 VERBOSE、DEBUG、INFO、WARN、ERROR、ASSERT 或 压制。 SUPPRESS 将关闭您的标签的所有日志记录。你可以 还创建一个 local.prop 文件,其中包含以下内容: 'log.tag.=' 并将其放在 /data/local.prop 中。

    所以默认情况下调用 slf4j 的Logger.debug 不会做任何事情。另一方面,android.util.Log.d 不调用isLoggable,因此生成了日志条目。

    javadoc 中提到的选项都不是可口的,这反而使 slf4j 的 Logger.debug 没有用处。如果可以通过编程方式将记录器配置为忽略isLoggable,那就太好了,但在撰写本文时它还不能。

    另见Does Log.isLoggable returns wrong values?

    【讨论】:

      【解决方案2】:

      我发现这个版本更容易使用:http://noveogroup.github.io/android-logger/

      您可以在android-logger.properties 配置文件中设置所需的日志级别。它并不完全尊重 Logcat 日志级别,但至少您可以在使用 slf4j-android 时显示调试消息而不会弄乱setprop

      【讨论】:

        【解决方案3】:

        您也可以使用https://github.com/mvysny/slf4j-handroid - 在开发阶段记录调试消息的特殊分支;它还包含针对 Android Studio 1.5 中未记录某些异常的错误的解决方法。

        【讨论】:

          【解决方案4】:

          这对我有用。要将调用 LoggerFactory.getLogger(MyClass.class) 的类的默认 INFO 级别更改为 DEBUG,请在命令行中键入:

          adb shell setprop log.tag.MyClass DEBUG
          

          那么 MyClass 的所有 DEBUG 和更高输出将在 logcat 中。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-05-06
            • 1970-01-01
            • 2021-01-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多