The Simple Logging Facade for Java (SLF4J) serves as a simple facade or abstraction for
various logging frameworks (e.g. java.util.logging, logback, log4j) allowing the end
user to plug in the desired logging framework at deployment time.
官網對於slf4j的描述:SLF4J 是日誌記錄系統的簡單外觀,允許最終用戶在部署時插入所需的日誌記錄系統
。
爲什麼不直接使用system.out.println()
來打印我想看的信息?
system.out.println()
來打印我想看的信息? 因爲system.out.println()
日誌打印不可控制、也不能添加過濾器、打印時間無法確定、日誌沒有級別區分,而且無法將信息記錄下來。
爲了解決項目在運行過程中能夠讓開發人員清晰明瞭地知道項目地運行情況,log日誌應運而生。現在的日誌框架也是非常多的,常見的日誌框架包括了JUL(java util logging)、JCL(jakarta commons logging)、Jboss-logging、logback、log4j、log4j2、slf4j
。
我們在項目中一般選擇面向slf4j這種日誌門戶進行編程,但是日誌底層的具體實現交給了不同的日誌框架,例如交給log4j、logback……
日誌框架一多java的很多技術棧中使用的日誌框架就無法做到統一,比如說我的項目使用了A組件和B組件,A組件底層使用的日誌框架是log4j,B組件底層使用的日誌框架是jul,如果想要統一使用slf4j日誌框架,我們也不需要挨個去檢查調整相關底層的依賴。
SLF4J官網提供了一組橋接傳統日誌API的的模塊,slf4j爲我們提供了一些jar包:
jcl-over-slf4j.jar
可以用於替換 commons-logging
log4j-over-slf4j.jar
可以替換log4j
jul-to-slf4j.jar
可以替換jul
通過引入這些中間包
就可以達到既能夠使用slf4j
日誌框架又能夠完美支持項目組件依賴的其他日誌框架的目的。
我們常用的springboot項目選擇的日誌框架是slf4j+logback
的形式,什麼意思?就是項目面向的是slf4j
,其實底層的日誌框架具體實現使用的是logback
。
如何在springboot項目中使用slf4j框架?
官網給出了示例:
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");
}
}
日誌的等級分爲:trace
、debug
、info
、warn
、error
,從左往右日誌等級依次遞增,可以通過在項目中配置日誌的輸出等級從而達到只輸出指定級別的日誌信息。下面在新建項目中分別用5中等級打印一下日誌信息:
package org.magic.log;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class LogApplicationTests {
private Logger logger = LoggerFactory.getLogger(getClass());
@Test
void contextLoads() {
logger.trace("trace");
logger.debug("debug");
logger.info("info");
logger.warn("warn");
logger.error("error");
}
}
結果只打印出了info
、warn
、error
三種,debug
和trace
並沒有打印出來,說明springboot默認的日誌級別是info
,項目只會打印info
級別以上的日誌。
通過在配置文件中設置日誌級別來控制日誌輸出,我們可以配置全局日誌輸出級別或者指定某個目錄下的日誌輸出級別:
示例:設置org.magic.log
目錄下的文件的輸出等級爲trace
,重新啓動項目測試類contextLoads
日誌輸出格式
%d 表示日期時間
%thread 表示線程名稱
%-3level 級別從左顯示3個字符長度
%logger{50} logger名字最長50個字符,否則按照句點分割
%msg 日誌信息
%n 換行符
示例:%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-3level %logger{50} --%msg%n
在項目的配置文件中自定義日誌的輸出格式:
#日誌在控制檯的輸出格式
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-3level %logger{50} --%msg%n
#日誌在日誌文件中的輸出格式
#logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-3level %logger{50} --%msg%n
#將日誌信息輸出到指定的日誌文件中
logging.file.name=mylog.log