程序員都知道,日誌對於一個應用系統來講相當重要,如今應該也沒有無日誌的系統了吧。不少程序員都知道 Log4j,Logback,java.util.logging 等日誌庫,最近看到一些老的項目仍是單純地只使用 Log4j 等日誌庫,若是你還不懂 Slf4j,那麼從如今開始,該是時候學習使用下 Slf4j 了。SLF4J,即簡單日誌門面(Simple Logging Facade for Java),它並非用來替代 Log4j,Logback 等日誌庫的,它只是提供了一堆接口以及一個 LoggerFactory 工廠類,是爲了兼容不一樣的日誌庫而抽象出來的適配器接口。具體的日誌實現仍是須要使用不一樣的日誌框架來完成。java
SLF4J 和 JCL(之前叫 Jakarta Commons Logging,如今叫 Apache Commons Logging) 都是日誌門面,所不一樣的是 JCL 是在運行時動態尋找日誌庫進行綁定,SLF4J 是在編譯時靜態綁定指定的日誌庫。如今仍是不少應用系統使用 JCL + Log4j 這種搭配的,不過當程序規模愈來愈龐大是,JCL 的動態綁定並非總能成功的,在Sping官方文檔中 Not Using Commons Logging 小節也提到由於算法問題引發。大概這也是 SLF4J 產生的一個緣由吧。程序員
這裏使用 slf4j + log4j 演示下簡單的使用。須要導入三個包:slf4j-1.7.25.jar
,slf4j-log4j12-1.7.25.jar
, log4j-1.2.17.jar
。而後以下使用:算法
package cn.mqq; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author mqq * @create 2018-03-13 23:46 */ public class Test { private static final Logger log = LoggerFactory.getLogger(Test.class); public static void main(String[] args) { log.debug("debug 測試"); log.info("info 測試"); log.warn("warn 測試"); log.error("error 測試"); } }
運行結果:apache
發現並無打印出日誌,這是由於缺乏了 log4j.properties 配置文件。在 /src/main/resources
目錄下添加文件 log4j.properties,內容以下:app
log4j.rootLogger = DEBUG,CONSOLE log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Threshold = INFO log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [%c] - %m%n
再次運行以下:框架
運行工程。學習
日誌的使用就是這麼簡單,用了 slf4j 之後,經過修改不一樣的 jar 包,能夠很方便地更換不一樣的日誌框架,如把 slf4j-log4j12-1.7.25.jar
和 log4j-1.2.17.jar
換成 logback-classic-1.2.3.jar
包便可把 log4j 日誌庫換成 logback 日誌庫,配置文件也要換成相應的 logback 配置文件。測試