1. 程式人生 > 實用技巧 >SpringBoot日誌功能

SpringBoot日誌功能

三、SpringBoot日誌功能

1、日誌框架

市面上的日誌框架:

JUL、JCL、Jboss-logging、Logback、Log4j、Log4j、SLF4J...

日誌門面(日誌的抽象層) 日誌實現
JCL(Jakarta Commons Logging)SLF4J(Simple Logging Facader for Java)Jboss-logging Log4j JUL (java.uti.logging) Log4j2 Logback

左邊選擇一個門面(抽象層),右邊選擇一個實現:

日誌門面:SLF4J;

日誌實現:Logback。

SpringBoot : 底層是Spring框架,Spring框架預設是用JCL ; SpringBoot選用SLF4J和logback

2、SLF4J使用

2.1、如何在系統中使用SLF4J:http://www.slf4j.org/

開發的時候,日誌記錄方法的呼叫,不應該·來直接呼叫日誌的實現類,而是呼叫日誌抽象層裡面的方法;

需要給系統裡面匯入SLF4J的jar和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");
}
}

圖示:

每一個日誌的實現框架都有自己的配置檔案。使用SLF4J以後,配置檔案還是做成日誌實現框架自己本身的配置檔案。

2.2遺留問題

a ( SLF4J + logback ) : Spring ( commons-logging ) 、Hibernate ( jboss-logging ) 、Mybatis、xxx

統一日誌記錄,即使是別的框架,也能統一使用SLF4J進行輸出?

如何讓系統中所有的日誌都統一到SLF4J :

  1. 將系統中其他日誌框架先排除出去;
  2. 用中間包來替換原有的日誌框架;
  3. 匯入SLF4J其他的實現。

3、SpringBoot日誌關係

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.3.1.RELEASE</version>
<scope>compile</scope>
</dependency>

SpringBoot用它來做日誌功能:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
<version>2.3.1.RELEASE</version>
<scope>compile</scope>
</dependency>

底層依賴關係:

總結:

  1. SpringBoot底層是使用SLF4J + logback的方式進行日誌記錄;

  2. SpringBoot把其他的日誌都替換成了SLF4J;

  3. 中間替換包:

  4. 如果我們要引入其他框架,一定要把這個框架的預設日誌依賴移除掉。( Spring5預設的抽象層由comons-logging變成SLF4J )。

SpringBoot能自動適配所有的日誌,而且底層使用SLF4J + logback的方式記錄日誌,引入其他框架的時候,只需要把這個框架依賴的日誌框架排除掉。

4、日誌使用

4.1、預設配置

SpringBoot預設幫我們配好了日誌:

    //記錄器
Logger logger = LoggerFactory.getLogger(getClass()); @Test
void contextLoads() {
//日誌的級別由低到高:trace<debug<info<warn<error
//可以調整輸出的日誌級別,日誌就只會在這個級別以後的高階別生效
logger.trace("trace日誌");
logger.debug("debug日誌");
//SpringBoot預設使用的是info級別的,也成為root級別
logger.info("info日誌");
logger.warn("warn日誌");
logger.error("error日誌");
}

SpringBoot修改日誌的預設配置:

#指定日誌的輸出級別
logging.level.com.hello=trace #不指定路徑就在當前專案下生成springboot.log日誌
#可以指定完整的路徑
#logging.file.name=E:/springboot.log
#在當前磁碟的根路徑下建立springHello資料夾和裡面的log資料夾,使用spring.log作為預設檔案
logging.file.path=/springHello/log #在控制太輸出的日誌的格式
logging.pattern.console=
#指定檔案中日誌輸出的格式
logging.pattern.file=

4.2、指定配置

給類路徑放上每個日誌框架自己的配置檔案即可,SpringBoot就不使用預設配置

ogging System Customization
Logback logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy
Log4j2 log4j2-spring.xml or log4j2.xml
JDK (Java Util Logging) logging.properties

logback.xml : 直接就被日誌框架識別了;

logback-spring.xml : 日誌框架就不直接載入日誌的配置項,由SpringBoot解析日誌配置,可以使用SpringBoot的高階Profile功能

<springProfile name="staging">
//可以指定某段配置只在某個環境下生效
<!-- configuration to be enabled when the "staging" profile is active -->
</springProfile> <springProfile name="dev | staging">
<!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile> <springProfile name="!production">
<!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>