Spring Boot(十)Logback和Log4j2集成與日誌發展史

一、簡介

Java知名的日誌有很多,比如:JUL、Log4j、JCL、SLF4J、Logback、Log4j2,那麼這些日誌框架之間有着怎樣的關係?誕生的原因又是解決什麼問題?下面一起來看。

## 1.1 JUL Java有自己的日誌框架JUL(Java Util Logging)在java.util.logging下,因爲對開發者不友好,使用成本太高和日誌級別分類不清晰的問題,所有很少有開發者用。 ## 1.2 Log4j 因爲JUL的缺陷問題,這就給了Log4j機會,所有Log4j一經推出就迅速風靡全球。 ## 1.3 JCL JCL是Jakarta Commons-Logging的縮寫,Jakarta在這裏指的是一個組織,而不是印度的首都雅加達,Jakarta,一個早期的Apache開源項目,用於管理各個Java子項目,諸如Tomcat, Ant, Maven, Struts, JMeter, Velocity, JMeter, Commons等。2011年12月,在所有子項目都被遷移爲獨立項目後,Jakarta名稱就不再使用了。 JCL誕生的初衷是因爲Java自身的一些包用了JUL,而Log4j用戶使用的有很多,那麼JCL就是提供一套API來實現不同Logger之間的切換。 ## 1.4 SLF4J SLF4J(Simple Logging Facade For Java)簡單日誌門面,和JCL功能類似,但JCL有一個致命的缺點就是算法複雜,出現問題難以排除,而SLF4J的誕生就是爲了解決JCL的缺點。 值得一提的是SLF4J的作者就是Log4j的作者。 ## 1.5 Logback Logback是Log4j的作者的另一個開源日誌組件,與Log4j相比,Logback重新了內核,使它的性能提升了很多,大約是Log4j的10倍,同時佔用更小的內存,並且完整的實現了SLF4J API是你可以很方便的切換日誌框架。 ## 1.6 Log4j2 Log4j2有着和Logback相同的功能,但又有自己單用的功能,比如:插件式結構、配置文件優化、異步日誌等。 Log4j2是Log4j的升級,它比其前身Log4j 1.x提供了重大改進,並提供了Logback中可用的許多改進,同時修復了Logback架構中的一些固有問題。 從GitHub的更新日誌來看,Logback已經有半年沒有更新了,而作爲知名組織的Apache下的Log4j2的更新卻是非常活躍的,Log4j 1.x 於2015年8月停止維護更新了。 **GitHub地址** Logback:https://github.com/qos-ch/logback log4j2:https://github.com/apache/logging-log4j2 本文分別來看Logback和Log4j2在Spring Boot中的實現。 # 二、Logback使用 開發環境 - JDK 8 - Spring Boot 2.0.4 RELEASE - Maven - Windows 10 - IDEA 2018.2 ## 2.1 Logback的使用 Spring Boot默認集成了Logback,可以開箱即用,非常方便。因爲spring-boot-starter-logging是Logback的日誌實現,而Spring Boot啓動項spring-boot-starter又依賴了spring-boot-starter-logging,所以Spring Boot就默認集成了Logback,包依賴如下圖: ![](http://icdn.apigo.cn/blog/sb-logging-path.png?imageView2/0/w/500/h/300) 日誌是默認控制檯輸出的,我們程序啓動的時候就使用Logback,如下圖所示: ![](http://icdn.apigo.cn/blog/springboot-log2.png) 日誌組成解讀: - 日期和時間:毫秒精度,易於排序 - 日誌級別:trace、debug、info、warn、error(日誌級別依次從低到高) - 進程ID - `---`分隔符 - 線程名稱:括在方括號中(可以截斷控制檯輸出) - 記錄器名稱:這通常是源類名(通常縮寫) - 日誌具體信息 ## 2.2 輸入文件 如果需要輸出日誌到文件,只需要在application.properties配置文件設置:logging.file或logging.path,示例如下: ```xml logging.level.root=info logging.file=D:\\log\\my.log ``` 可以通過設置日誌的級別,忽略更低級別的日誌輸出。 **注意:** logging.file和logging.path設置一個屬性即可,如果兩個都設置,則以logging.file爲主,logging.path無效。 日誌文件容量設置:使用“logging.file.max-history”屬性爲日誌最大容量設置,默認10M超過則分割爲多個文件。 ## 2.3 自定義日誌配置 日誌服務在ApplicationContext創建前就初始化了,所以通過設置屬性和傳統的配置XML文件,可以對日誌進行管理和控制。 只需要在src/main/resources下,創建好約定名稱的XML文件,即可完成對日誌系統的設置,不同的日誌系統有不同的約定名稱,如下列表: | 日誌 | 名稱 | | ------- | ------------------------------------------------------------ | | logback | logback-spring.xml, logback-spring.groovy, logback.xml, 或者 logback.groovy | | log4j2 | log4j2-spring.xml 或者 log4j2.xml | Spring Boot官方建議使用“-spring”的命名規則,進行日誌配置,如:logback-spring.xml而不是logback.xml。 當然你也可以自定義日誌名稱,只需要在application.properties配置即可,代碼如下: > logging.config=classpath:logging-config.xml 來看一個logback-spring.xml示例文件: ```xml ${LOG_MSG} ${LOG_HOME}/all_${LOG_PREFIX}.log ${LOG_DIR}/all_${LOG_PREFIX}%i.log ${MAX_HISTORY} ${MAX_FILE_SIZE} ${LOG_MSG} ERROR DENY ACCEPT ${LOG_HOME}/err_${LOG_PREFIX}.log ${LOG_DIR}/err_${LOG_PREFIX}%i.log ${MAX_HISTORY} ${MAX_FILE_SIZE} ${LOG_MSG} ``` ## 2.4 代碼中使用日誌 在代碼中使用日誌,只需要使用如下代碼: ```java private Logger logger = LoggerFactory.getLogger(this.getClass()); //... logger.debug("this is debug"); logger.info("this is info"); ``` # 三、Log4j2集成 ## 3.1 配置依賴組件 Spring Boot添加Log4j2依賴的同時,需要排除Logback依賴,配置pom.xml代碼如下: ```xml org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-logging org.springframework.boot spring-boot-starter-log4j2 ``` ## 3.2 自定義日誌配置 添加log4j2-spring.xml文件在src/main/resources文件下,配置文件代碼如下: ```xml ``` 輸入日誌到控制檯和D盤mylog.log文件中。 到此爲止,已經完成了log4j2的集成,運行項目,查看日誌。 示例源碼:https://github.com/vipstone/springboot-example/tree/master/springboot-logging **參考資料** JAVA日誌的前世今生:https://www.cnblogs.com/xiexj/p/9417128.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章