依賴jar
包:slf4j-api-x.x.x.jar,log4j.jar,slf4j-log4j12.jar
apache
log4j
並無實現slf4j
相應的接口,因此加了一層橋接層(slf4j-log4j12.jar
包裏面的內容)來實現slf4j
對log4j
的調用slf4j-log4j12.jar
裏面的代碼很簡單
只有5個類,關鍵的兩個類是Log4jLoggerFactory
和Log4jLoggerAdapter
,對應Log4jLoggerFactory
的getLogger
方法源碼:api
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
spa
Log4jLoggerAdapter
實現了slf4j
的Logger
接口,而且實際代理了org.apache.log4j.Logger
類,因此對Log4jLoggerAdapter
的全部方法調用,最終調用的都是org.apache.log4j.Logger
對應的方法代理
log4j
是經過slf4j-log4j12.jar
橋接包來完美適配slf4j
使用code