现在主流的日志方案是使用SLF4J作为API在代码中使用,具体的日志实现由不同的JAR完成,本文帮助了解一下SLF4J常见问题以及如何完美兼容各种不同日志框架
SLF4J如何自动使用lib中的日志实现JAR ?比如Logback, Log4j
答:直接使用org.slf4j.impl.StaticLoggerBinder
,该类由各日志框架实现,比如Logback
.
import org.slf4j.impl.StaticLoggerBinder;
private static String STATIC_LOGGER_BINDER_PATH = "org/slf4j/impl/StaticLoggerBinder.class";
Log4j, Commons-Logging, JUL(java.util.logging)都没有实现org.slf4j.impl.StaticLoggerBinder, 应该如何被SLF4J使用?
答: 使用绑定包slf4j-log4j12
, slf4j-jcl
, slf4j-jdk14
,这些包中都实现了StaticLoggerBinder
如果第三方的项目已经使用了其他日志框架,如何统一使用SLF4J
?
答:使用桥接包log4j-over-slf4j
, jcl-over-slf4j
, jul-over-slf4j
,这些桥接包就是底层使用SLF4J
分别实现了Log4j
, Commons-Logging
,JUL
的核心功能
可以同时使用log4j-over-slf4j.jar和slf4j-log4j12.jar吗?
答:不可以,log4j-over-slf4j.jar
中使用SLF4J
实现了Log4j
,但是slf4j-log4j12.jar
又把SLF4J
的实现交给了Log4j
, 因此就产生了一个死循环。