SLF4J&&Log4j
简介
依赖jar
包:slf4j-api-x.x.x.jar,log4j.jar,slf4j-log4j12.jar
解析
log4j
并没有实现slf4j
相应的接口,所以加了一层桥接层(slf4j-log4j12.jar
包里面的内容)来实现slf4j
对log4j
的调用slf4j-log4j12.jar
里面的代码很简单
只有5个类,关键的两个类是Log4jLoggerFactory
和Log4jLoggerAdapter
,对应Log4jLoggerFactory
的getLogger
方法源码:
public Logger getLogger(String name) {
Logger slf4jLogger = loggerMap.get(name);
if (slf4jLogger != null) {
return slf4jLogger;
} else {
org.apache.log4j.Logger log4jLogger;
if(name.equalsIgnoreCase(Logger.ROOT_LOGGER_NAME))
log4jLogger = LogManager.getRootLogger();
else
log4jLogger = LogManager.getLogger(name);
Logger newInstance = new Log4jLoggerAdapter(log4jLogger);
Logger oldInstance = loggerMap.putIfAbsent(name, newInstance);
return oldInstance == null ? newInstance : oldInstance;
}
}
Log4jLoggerFactory
实现了slf4j
的ILoggerFactory
接口,调用getLogger
方法获取Logger
Log4jLoggerAdapter
实现了slf4j
的Logger
接口,并且实际代理了org.apache.log4j.Logger
类,所以对Log4jLoggerAdapter
的所有方法调用,最终调用的都是org.apache.log4j.Logger
对应的方法
小结
log4j
是通过slf4j-log4j12.jar
桥接包来完美适配slf4j
使用
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。