Spring Boot與日誌

程式碼是Code發表於2020-10-04

Spring Boot與日誌

一. 日誌框架

市面上的日誌框架: JUL, JCL, Jboss-logging, logback, log4j, log4j2, slf4j …

日誌門面日誌實現
JCL(jakarta Commons Logging), SLF4j(Simple Logging Facade For Java), Jboss-loggingLog4j, JUL(java.util.logging), Log4j2, Logback

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

Spring框架預設選擇:JCLcommmons-logging

SpringBoot預設選用:SLF4Jlogback


二. SLF4j使用

1. 如何在系統中使用SLF4j

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

給系統匯入slf4jjar包 和 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. 統一日誌框架

A系統(slf4j + logback) : Spring(commons-logging) + Hibernate(jboss-logging) + MyBatis

解決同一日誌記錄, 即是別的框架和系統一起同一使用slf4j進行輸出

在這裡插入圖片描述

解決方案:

  1. 將系統中其它日誌框架先排除

  2. 使用中間包來替換原有的日誌框架

  3. 匯入slf4j其它的實現


三. SpringBoot日誌關係

SpringBoot使用spring-boot-starter-logging來做日誌功能

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-logging</artifactId>
</dependency>

底層依賴關係:

在這裡插入圖片描述

總結:

  1. SpringBoot底層也是使用slf4j + logback 的方式進行日誌記錄
  2. SpringBoot也把其它的日誌都替換成立slf4j
  3. 中間的替換包內部使用slf4j的實現
  4. 當引用了其它框架, 一定要把這個框架的預設日誌依賴移除掉

四. 日誌使用

1. 預設配置

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

import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class LoggingApplicationTests {

	//獲取日誌記錄器
	Logger logger = LoggerFactory.getLogger(getClass());

	@Test
	void contextLoads() {
		//日誌級別
		logger.trace( "這是trace(跟蹤)日誌...");
		logger.debug("這是debug(除錯)日誌...");
		//SpringBoot預設給我們使用的是info級別
		logger.info("這是info(普通)日誌...");
		logger.warn("這是warn(警告)日誌...");
		logger.error("這是error(錯誤)日誌...");
	}

}

SpringBoot預設只顯示info級別或以上的日誌資訊, 可以通過修改配置檔案的引數設定顯示日誌的級別

logging.level 包名 = 級別, 預設級別為root

logging.level.com.study=trace

同時SpringBoot預設只在控制檯中輸出日誌資訊, 如果想儲存檔案需要設定日誌路徑和檔名

# 指定日誌檔案路徑和檔名
logging.file.path=/spring/log
logging.file.name=springboot.log

即在linux的根目錄下/spring/log下的springboot.log檔案


可以通過配置指定日誌輸出的格式

# 在控制檯輸出的日誌格式
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
# 在日誌檔案中的輸出格式
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} === %msg%n

2. 指定配置

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

Logging SystemCustomization
Logbacklogback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
Log4j2log4j2-spring.xml, log4j2.xml
JDK(Java.Util.Logging)logging.properties

相關文章