我正在使用slf4j在我的应用程序中进行日志记录。我了解了slf4j的用途。我想知道如何找出slf4j当前绑定到哪个日志库。我在我的引用库中有log4j。我假设slf4j已将其自身绑定到log4j。我想知道的是,有没有办法明确确认这种绑定?
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
zbdgwd5y2#
StaticLoggerBinder的getLoggerFactoryClassStr()方法可能就是您要找的。
StaticLoggerBinder
getLoggerFactoryClassStr()
sd2nnvve3#
很简单。在..比如.. www.example.com(...)上设置一个断点LOG.info。一旦调试器停止在那里,就进入..和viola..你会发现自己进入了实际记录器的代码中...比如log4j或logback ...随便什么。
mkshixfv4#
可以使用slf4j主公共API(即不使用内部StaticLoggerBinder)来执行此操作,例如,检测slf4j是否已绑定到log4j2:
if ("org.apache.logging.slf4j.Log4jLoggerFactory".equals( org.slf4j.LoggerFactory.getILoggerFactory().getClass().getName() ) { ... }
hi3rlvi25#
或者,避免使用StaticLoggerBinder(它不是slf 4j-api的一部分):
log.info(log.getClass().getName());
在我的情况下,这打印
ch.qos.logback.classic.Logger
5条答案
按热度按时间iih3973s1#
只需执行SLF4J的操作即可发现绑定:
现在,您可以尝试找出在我的示例中logback的实际实现是什么:
这将打印:
zbdgwd5y2#
StaticLoggerBinder
的getLoggerFactoryClassStr()
方法可能就是您要找的。sd2nnvve3#
很简单。在..比如.. www.example.com(...)上设置一个断点LOG.info。一旦调试器停止在那里,就进入..和viola..你会发现自己进入了实际记录器的代码中...比如log4j或logback ...随便什么。
mkshixfv4#
可以使用slf4j主公共API(即不使用内部StaticLoggerBinder)来执行此操作,例如,检测slf4j是否已绑定到log4j2:
hi3rlvi25#
或者,避免使用StaticLoggerBinder(它不是slf 4j-api的一部分):
在我的情况下,这打印