SLF4J不是日志框架而是一个简单日志门面,它的目的是容许最终用户在部署时使用指望的日志框架。html
The Simple Logging Facade for Java (SLF4J) serves as a simple facade or abstraction for various logging frameworks (e.g. java.util.logging, logback, log4j) allowing the end user to plug in the desired logging framework at deployment time.java
因此SLF4J在使用时除了自身的jar包外,还须要日志框架以及适配器。apache
以应用中使用log4j为例。须要依赖slf4j-api,slf4j-log4j,log4j。api
使用方法:框架
Logger logger = LoggerFactory.getLogger(getClass());spa
实现原理:.net
SLF4J 在编译时静态绑定org.slf4j.impl.StaticLoggerBinder,而适配器中必须包含这个类。日志
LoggerFactory:code
public static ILoggerFactory getILoggerFactory() { if (INITIALIZATION_STATE == UNINITIALIZED) { INITIALIZATION_STATE = ONGOING_INITIALIZATION; performInitialization(); } switch (INITIALIZATION_STATE) { case SUCCESSFUL_INITIALIZATION: return StaticLoggerBinder.getSingleton().getLoggerFactory(); case NOP_FALLBACK_INITIALIZATION: return NOP_FALLBACK_FACTORY; case FAILED_INITIALIZATION: throw new IllegalStateException(UNSUCCESSFUL_INIT_MSG); case ONGOING_INITIALIZATION: // support re-entrant behavior. // See also http://bugzilla.slf4j.org/show_bug.cgi?id=106
return TEMP_FACTORY; } throw new IllegalStateException("Unreachable code"); } }
SLF4J与Common-Logging的区别orm
Common-Logging是apache提供的一个通用的日志接口。这两个日志门面的功能相似,不一样的是实现方式不同。SLF4J是经过静态绑定的方式获得日志框架,而Common-Logging是动态查找方式。
Common-Logging 使用方式:Log logger = LogFactory.getLog(getClass());
PS:若是想从Common-logging切换到SLF4J,能够添加jar包:jcl-over-slf4j,slf4j-api。代码不须要任何修改。
参考连接:
http://www.slf4j.org/
http://www.360doc.com/content/14/0310/21/12129652_359387856.shtml
http://blog.csdn.net/yycdaizi/article/details/8276265