第一章 介紹
1.1 爲什麼有日誌及框架?
- 跟蹤用戶對系統訪問
- 統計
- Debug
1.2 日誌框架
市場上存在非常多的日誌框架。
JUL(java.util.logging),JCL(Jakarta Commons Logging),Log4j,Log4j2,Logback(具體框架,springboot使用)、SLF4j、jboss-logging等。
Spring 在框架內部使用JCL。
Log4j被apache收購,升級,改爲log4j2,框架改動很大,只是借用之名。
Log4j,Logback,SLF4j都是同一個作者。
日誌門面類似於接口,是一種規範,具體日誌實現爲這種規範下的一個落地實現產品。
1.3 優選slf4j+logback
第二章 原理
2.1 如何在系統中使用slf4j+logback
2.2 使用slf4j+其他實現
需要中間的一個適配器包,去適配slf4j門面。
第三章 歷史遺留問題
3.1 遺留問題解決
如何將這些框架統一日誌記錄,統一使用slf4j進行輸出?
springboot(slf4j+logback): Spring(commons-logging)、Hibernate(jboss-logging)、MyBatis、xxxx
https://www.slf4j.org/legacy.html
引入一個偷樑換柱包,使框架依賴的日誌框架接口依然爲老的接口,但具體內部方法實現已改爲調用slf4j的接口。
3.2 將應用中所使用的日誌框架commons-logging排除掉
3.3 引入jcl轉換爲slf4j依賴包(偷樑換柱)
<dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId><!-- 替換commons-logging--> <version>1.7.25</version> </dependency> |
第四章 我們的選擇-優選slf4j+logback
4.1 將系統中其他日誌框架先排除出去;(所有項目)
4.2 用中間包來替換原有的日誌框架
<dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId><!-- 替換commons-logging--> <version>1.7.25</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jul-to-slf4j</artifactId><!-- 替換java.util.logging--> <version>1.7.25</version> </dependency> |
jul用不用導入是需要根據你項目中要用到的框架是否依賴jul有關
4.3 我們slf4j及其他的實現
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId><!-- 間接依賴logback-core--><!-- 優秀的日誌實現--> </dependency> <!-- slf4j(門面): Simple Logging Facade for Java :簡單日誌門面(接口)(類似JDBC); log4j:日誌實現(類似數據庫驅動); log4j2(實現), logback(實現), 後來我們用slf4j+logback(最穩定的方案); --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId><!-- 抽象層,接口--> </dependency> |
4.4 測試代碼
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HelloWorld { public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(TestLog.class); logger.debug("debug..."); //用於調試程序 logger.info("info...");//用於請求處理提示消息 logger.warn("warn...");//用於警告處理提示消息 logger.error("error...");//用於異常處理提示消息 logger.error("==>>"+logger.getClass()); //class ch.qos.logback.classic.Logger } } |
4.5 配置文件logback.xml
每一個日誌的實現框架都有自己的配置文件。使用slf4j以後,配置文件還是做成日誌實現框架自己本身的配置文件
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="true"> <!-- 指定日誌輸出的地方--> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{360} - %msg%n</pattern> </encoder> </appender> <!-- 日誌:從低到高;只會打印指定級別以後的; additivity表示是否將日誌信息反饋給root DEBUG==》INFO===》WARN===》ERROR <logger name="com.atguigu.atcrowdfunding.mapper" level="debug" additivity="false"> <appender-ref ref="STDOUT"/> </logger> --> <root level="info"> <appender-ref ref="STDOUT" /> </root> </configuration> |