gpt4 book ai didi

android - 如何让 slf4j-android 遵守 Logcat 日志记录级别?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:00:13 26 4
gpt4 key购买 nike

我正在通过 gradle/maven 使用 slf4j-android 1.6.1-RC1,当我在模拟器中运行应用程序时,当我在 Android Studio 0.3.5 下调用 Log.debug 时,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 中设置的日志级别?

最佳答案

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

Checks to see whether or not a log for the specified tag is loggable at the specified level. The default level of any tag is set to INFO. This means that any level above and including INFO will be logged. Before you make any calls to a logging method you should check to see if your tag should be logged. You can change the default level by setting a system property: 'setprop log.tag. ' Where level is either VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT, or SUPPRESS. SUPPRESS will turn off all logging for your tag. You can also create a local.prop file that with the following in it: 'log.tag.=' and place that in /data/local.prop.

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

javadoc 中提到的所有选项都不令人满意,这反而使 slf4j 的 Logger.debug 变得毫无用处。如果可以通过编程方式将记录器配置为忽略 isLoggable 就好了,但在撰写本文时它还不能。

另见 Does Log.isLoggable returns wrong values?

关于android - 如何让 slf4j-android 遵守 Logcat 日志记录级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19984838/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com