天天看點

Spring Boot 自定義日志詳解

本節内容基于 Spring Boot 2.0.

你所需具備的基礎

  • 什麼是 Spring Boot?
  • Spring Boot 核心配置檔案詳解
  • Spring Boot 開啟的 2 種方式
  • Spring Boot 自動配置原理、實戰
  • Spring Boot 2.x 啟動全過程源碼分析

更多請在Java技術棧微信公衆号背景回複關鍵字:boot。

Spring Boot 日志綜合介紹

Spring Boot 内部代碼使用的是

commons-logging

來記錄日志的,但是底層日志實作架構是可以随意替換的。Spring Boot為

Java Util Logging

,

Log4J2

, 和

Logback

日志架構提供了預設配置。

Spring Boot支援的日志架構預設配置如下。

# LOGGING
logging.config= # Location of the logging configuration file. For instance, `classpath:logback.xml` for Logback.
logging.exception-conversion-word=%wEx # Conversion word used when logging exceptions.
logging.file= # Log file name (for instance, `myapp.log`). Names can be an exact location or relative to the current directory.
logging.file.max-history=0 # Maximum of archive log files to keep. Only supported with the default logback setup.
logging.file.max-size=10MB # Maximum log file size. Only supported with the default logback setup.
logging.level.*= # Log levels severity mapping. For instance, `logging.level.org.springframework=DEBUG`.
logging.path= # Location of the log file. For instance, `/var/log`.
logging.pattern.console= # Appender pattern for output to the console. Supported only with the default Logback setup.
logging.pattern.dateformat=yyyy-MM-dd HH:mm:ss.SSS # Appender pattern for log date format. Supported only with the default Logback setup.
logging.pattern.file= # Appender pattern for output to a file. Supported only with the default Logback setup.
logging.pattern.level=%5p # Appender pattern for log level. Supported only with the default Logback setup.
logging.register-shutdown-hook=false # Register a shutdown hook for the logging system when it is initialized.
           

如果不配置以上任何參數,日志預設隻會以

INFO

以上的級别列印在控制台,不會記錄在日志檔案中。

如果使用了任何

Starters

,那 Spring Boot 預設會使用

Logback

日志架構記錄日志,并為

Logback

提供了支援

Java Util Logging

Commons Logging

Log4J

SLF4J

适合的橋接器以便能從這些日志門面中自由切換。即項目中不管使用哪個日志門面,Logback都能正常工作。

如下圖,從

spring-boot-starter-web

依賴樹中看出包含了預設日志架構

Logback

及其他的橋接器。

Spring Boot 日志實戰

在配置檔案

application.properties

添加以下配置。

# 日志級别
logging.level.root=DEBUG

# 輸出到日志檔案
logging.file=d:/logs/javastack.log

# 控制架構中的日志級别
logging.level.org.springframework=INFO
logging.level.sun=WARN
           

Application

啟動類中添加以下測試代碼。

private static final org.apache.commons.logging.Log logger1 = org.apache.commons.logging
			.LogFactory
			.getLog(SpringBootBestPracticeApplication.class);

private static final org.slf4j.Logger logger2 = org.slf4j.LoggerFactory
		.getLogger(SpringBootBestPracticeApplication.class);

private static final java.util.logging.Logger logger3 = java.util.logging.Logger
		.getLogger("SpringBootBestPracticeApplication");
		
@Bean
public CommandLineRunner loggerLineRunner() {
	return (args) -> {
		logger1.error("commons logging error...");

		logger1.info("commons logging info...");
		logger2.info("slf4j info...");
		logger2.info("java util logging info...");

		logger1.debug("commons logging debug...");
	};
}		
           

日志輸出如下。

2018-05-24 17:16:21.645 ERROR 3132 --- [           main] c.j.s.SpringBootBestPracticeApplication  : commons logging error...
2018-05-24 17:16:21.645  INFO 3132 --- [           main] c.j.s.SpringBootBestPracticeApplication  : commons logging info...
2018-05-24 17:16:21.645  INFO 3132 --- [           main] c.j.s.SpringBootBestPracticeApplication  : slf4j info...
2018-05-24 17:16:21.645  INFO 3132 --- [           main] c.j.s.SpringBootBestPracticeApplication  : java util logging info...
2018-05-24 17:16:21.645 DEBUG 3132 --- [           main] c.j.s.SpringBootBestPracticeApplication  : commons logging debug...
           

程式中使用了三種不同的日志門面測試,和預設的

Logback

架構工作都十分正常,日志也正常輸出到指定檔案中了。

Spring Boot 預設提供配置的形式非常簡單,隻适合簡單的日志應用,雖然說日志輸出格式可以自定義,但日志檔案如何按天滾動等其他更複雜的政策卻不能配置,隻能通過自定義引用日志檔案的形式。

Spring Boot 定制日志檔案

簡單的日志配置不能滿足實際項目需求,那可以通過引用定制日志檔案的形式達到目的。Spring Boot能根據類路徑下的類庫和配置檔案自動配置對應的日志架構。

日志架構 配置檔案
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

按對應類庫在 classpath 下建立對應支援的日志配置檔案就行,或者通過配置

logging.config

指定。

既然預設是支援

Logback

的,那現在隻要在資源根目錄下建立一個

logback-spring.xml

檔案即可。

xx-spring

這是 Spring Boot 推薦的命名方式,否則 Spring Boot 不能完全控制日志初始化,因為預設命名配置檔案

logback.xml

加載較早不能擷取到

application.properties

中的配置資訊。

看到這裡,相信你對 Spring Boot 的日志應該有了一個全面的了解。如何使用配置檔案列印日志和傳統項目一樣,這裡就不啰嗦了。

所有 Spring Boot 文章示例代碼都在 Github 上面,大家可以 Star 關注一下。

繼續閱讀