如何让slf4j-android兑现Logcat日志级别?

Yar*_*and 6 logging android slf4j

我通过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!");
Run Code Online (Sandbox Code Playgroud)

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 Studio中Logcat设置的日志级别,如android.util.Log一样?

ska*_*man 5

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

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

所以默认情况下调用slf4j Logger.debug会什么都不做.另一方面,android.util.Log.d不调用isLoggable,因此进行日志条目.

javadoc中提到的选项都不合适,这使得slf4j Logger.debug不太有用.如果记录器可以以编程方式配置为忽略isLoggable,那将是很好的,但在编写本文时它不能.

另请参见Log.isLoggable是否返回错误的值?