56

我正在使用 slf4j 登录我的应用程序。我明白了 slf4j 的目的。我想知道如何找出当前绑定的日志库 slf4j。我在我引用的库中有 log4j。我假设 slf4j 已将自身绑定到 log4j。

我想知道的是,有没有办法明确确认这个绑定?

4

4 回答 4

70

只需执行 SLF4J 的操作即可发现绑定:

final StaticLoggerBinder binder = StaticLoggerBinder.getSingleton();

现在您可以尝试找出在我的案例中实际实现的是什么:

System.out.println(binder.getLoggerFactory());
System.out.println(binder.getLoggerFactoryClassStr());

这打印:

ch.qos.logback.classic.LoggerContext[default]
ch.qos.logback.classic.selector.DefaultContextSelector
于 2012-05-08T19:58:04.193 回答
8

StaticLoggerBinder'sgetLoggerFactoryClassStr()方法可能是您正在寻找的方法。

于 2012-05-08T19:58:13.247 回答
3

简单的。在.. 说.. LOG.info(...) 上放一个断点。一旦调试器停在那里,进入.. 和 viola.. 你会发现自己在实际记录器的代码中......比如 log4j 或 logback.. 随便什么。

于 2016-07-20T16:00:19.943 回答
3

可以使用主要的 slf4j 公共 API(即没有内部 StaticLoggerBinder)来执行此操作,例如检测 slf4j 是否对 log4j2 有 bpound:

if ("org.apache.logging.slf4j.Log4jLoggerFactory".equals(
    org.slf4j.LoggerFactory.getILoggerFactory().getClass().getName()
) 
{ ... }
于 2019-05-14T16:51:31.880 回答