我正在使用 slf4j 登录我的应用程序。我明白了 slf4j 的目的。我想知道如何找出当前绑定的日志库 slf4j。我在我引用的库中有 log4j。我假设 slf4j 已将自身绑定到 log4j。
我想知道的是,有没有办法明确确认这个绑定?
只需执行 SLF4J 的操作即可发现绑定:
final StaticLoggerBinder binder = StaticLoggerBinder.getSingleton();
现在您可以尝试找出在我的案例中实际实现的logback是什么:
System.out.println(binder.getLoggerFactory());
System.out.println(binder.getLoggerFactoryClassStr());
这打印:
ch.qos.logback.classic.LoggerContext[default]
ch.qos.logback.classic.selector.DefaultContextSelector
StaticLoggerBinder
'sgetLoggerFactoryClassStr()
方法可能是您正在寻找的方法。
简单的。在.. 说.. LOG.info(...) 上放一个断点。一旦调试器停在那里,进入.. 和 viola.. 你会发现自己在实际记录器的代码中......比如 log4j 或 logback.. 随便什么。
可以使用主要的 slf4j 公共 API(即没有内部 StaticLoggerBinder)来执行此操作,例如检测 slf4j 是否对 log4j2 有 bpound:
if ("org.apache.logging.slf4j.Log4jLoggerFactory".equals(
org.slf4j.LoggerFactory.getILoggerFactory().getClass().getName()
)
{ ... }