摘自於http://blog.csdn.net/tengdazhang770960436/article/details/18006127
slf4j:Simple Logging Facade for Java,為java提供的簡單日志Facade。
Facade:門面,更底層一點說就是接口。他允許用戶以自己的喜好,在工程中通過slf4j接入不同的日志系統。更直觀一點,slf4j是個數據線,一端嵌入程序,另一端鏈接日志系統,從而實現將程序中的信息導入到日志系統並記錄。
因此,slf4j入口就是眾多接口的集合,他不負責具體的日志實現,只在編譯時負責尋找合適的日志系統進行綁定。具體有哪些接口,全部都定義在slf4j-api中。查看slf4j-api源碼就可以發現,里面除了public final class LoggerFactory類之外,都是接口定義。因此,slf4j-api本質就是一個接口定義。
當系統采用log4j作為日志框架實現的調用關系:
首先系統包含slf4j-api作為日志接入的接口;
在編譯時,slf4j-api中public final class LoggerFactor類中private final static void bind() 方法會尋找具體的日志實現類綁定,主要通過StaticLoggerBinder.getSingleton();
語句調用slf4j-log4j12鏈接slf4j-api和log4j中間的適配器。它實現了slf4j-apiz中StaticLoggerBinder接口,從而使得在編譯時綁定的是slf4j-log4j12的getSingleton()方法
log4j,這個是具體的日志系統。通過slf4j-log4j12初始化Log4j,達到最終日志的輸出。