How to find which library slf4j has bound itself to?

 ̄綄美尐妖づ 提交于 2019-12-18 10:44:45

问题


I am using slf4j for logging in my application. I get the purpose of slf4j. I would like to know how to find out which logging-library slf4j is currently binding to. I have log4j in my referenced libraries. I am assuming that slf4j has bound itself to log4j.

What I would like to know is, is there any way to explicitly confirm this binding?


回答1:


Just do what SLF4J does to discover the binding:

final StaticLoggerBinder binder = StaticLoggerBinder.getSingleton();

Now you can try to find out what is the actual implementation logback in my case:

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

This prints:

ch.qos.logback.classic.LoggerContext[default]
ch.qos.logback.classic.selector.DefaultContextSelector



回答2:


The StaticLoggerBinder's getLoggerFactoryClassStr() method is probably what you're looking for.




回答3:


It's possible to do this using the main slf4j public API (i.e. without the internal StaticLoggerBinder), e.g. to detect if slf4j has bpound to log4j2:

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



回答4:


Easy. Put a breakpoint on .. say.. LOG.info(...). Once debugger stops there, step into.. and viola.. you will find yourself in the code of the actual logger... say log4j or logback.. whatever.



来源:https://stackoverflow.com/questions/10505418/how-to-find-which-library-slf4j-has-bound-itself-to

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!