log4j 如何找到slf4j绑定到的库?

gmxoilav  于 2022-11-06  发布在  其他
关注(0)|答案(5)|浏览(265)

我正在使用slf4j在我的应用程序中进行日志记录。我了解了slf4j的用途。我想知道如何找出slf4j当前绑定到哪个日志库。我在我的引用库中有log4j。我假设slf4j已将其自身绑定到log4j。
我想知道的是,有没有办法明确确认这种绑定?

iih3973s

iih3973s1#

只需执行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
zbdgwd5y

zbdgwd5y2#

StaticLoggerBindergetLoggerFactoryClassStr()方法可能就是您要找的。

sd2nnvve

sd2nnvve3#

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

mkshixfv

mkshixfv4#

可以使用slf4j主公共API(即不使用内部StaticLoggerBinder)来执行此操作,例如,检测slf4j是否已绑定到log4j2:

if ("org.apache.logging.slf4j.Log4jLoggerFactory".equals(
    org.slf4j.LoggerFactory.getILoggerFactory().getClass().getName()
) 
{ ... }
hi3rlvi2

hi3rlvi25#

或者,避免使用StaticLoggerBinder(它不是slf 4j-api的一部分):

log.info(log.getClass().getName());

在我的情况下,这打印

ch.qos.logback.classic.Logger

相关问题