1、日志框架簡介
對於一個應用程序來說,日志的記錄是必不可少的一部分。線上的問題追蹤,基於日志業務邏輯統計分析等都離不開日志。java領域存在許多已經寫好成熟的日志框架,經常使用的有JCL(jakarta Commons logging), SLF4J(simple Logging facade java), jboss-logging, log4j, JUL(java.util.logging), log4j2, logback等。
從實現來說,java框架分為兩種,一種是日志門面(日志的抽象層)和日志實現,所以我們在選日志框架的時候,一般都是選一個日志門面,然后再選一個日志實現。其中,日志門面包括JCL(jakarta Commons logging), SLF4J(simple Logging facade java), jboss-logging等,而日志實現則包括 log4j, JUL(java.util.logging), log4j2, logback。
Spring框架默認使用的就是JCL, 實現層可以選log4j或者log4j2,而Spring boot選用的是 SLF4J和logback
2、日志框架之間的關系
因為日志框架之間沒用形成統一的接口,所我們在選日志門面和日志實現的時候不能選錯。而日志抽象接口也基本分為兩大陣營了,一個是JCL(jakarta Commons logging),另一個是SLF4J。
Commons Logging和Slf4j是日志門面(門面模式是軟件工程中常用的一種軟件設計模式,也被稱為正面模式、外觀模式。它為子系統中的一組接口提供一個統一的高層接口,使得子系統更容易使用)。log4j和Logback則是具體的日志實現方案。可以簡單的理解為接口與接口的實現,調用這只需要關注接口而無需關注具體的實現,做到解耦。
其中比較常用的組合使用方式是Slf4j與Logback組合使用(SpringBoot),Commons Logging與Log4j組合使用(Spring)。
Logback必須配合Slf4j使用。由於Logback和Slf4j是同一個作者,其兼容性不言而喻。
3、SLF4J使用
開發的時候,日志記錄方法的調用,不應該來直接調用日志的實現類,而是調用日志抽象層里面的方法,給系統導入slf4j和logback的實現jar包

import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HelloWorld { public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(HelloWorld.class); logger.info("Hello World"); } }
加入我們想在springBoot使用其他框架實現呢,要怎么辦?如下圖
比如我們先在SpringBoot中使用log4j框架日志,不僅僅要導入log4j.jar包,還要導入slf4j-log412.jar包,該jar包是一個是適配器,將slf4抽象接口和log4j進行適配。每一個日志的實現框架都有自己的配置文件,使用slf4j以后,配置文件還是做成日志實現框架的配置文件。
4、日志級別
日志級別由低到高:trace<debug<info<warn<error,日志會輸出大於等於當前所設置的日志級別,比如我設置日志級別為info,則就輸出info、warn、和error級別的日志信息,trace和debug將被忽視。我們還可以設置把日志寫到文件中,比如配置 logging.file=d:/springboot.log,則會在d盤上生成springboot.log文件。logging.path配置的是制定日志文件生成在哪個文件夾。