亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

Spring Boot 日志管理

1. 前言

誰能保證開發的軟件系統沒有問題?恐怕任何一個有經驗的程序員都不敢承諾吧!

在軟件的設計、開發階段,大家都是盡心盡力去做好各項工作,期望能有一個滿意的效果。

但是一個投入生產環境、擁有眾多用戶的軟件系統必然是一個復雜的系統工程,不經歷現實的檢驗,沒有人能準確地知道它到底會不會有問題。

所以,日志是重要的,不可或缺的。日志是軟件系統出現故障時,分析問題的主要依據。就像飛機的黑匣子,平時感覺毫不起眼,到了關鍵時刻必須要依靠它!

2. Spring Boot 日志管理

2.1 默認日志配置

Spring Boot 默認已經集成了日志功能,使用的是 logback 開源日志系統。

我們新建一個項目,Spring Boot 版本選擇 2.2.5 ,Group 為 com.imooc , Artifact 為 spring-boot-log。生成項目后導入 Eclipse 開發環境,然后運行啟動類,可以清楚地看到控制臺打印的日志信息。Spring Boot 日志默認級別是 INFO ,下圖也輸出了幾條 INFO 級別的日志。

圖片描述

Spring Boot 項目啟動時控制臺輸出的內容

Spring Boot 默認的日志輸出內容含義如下:

  • 日期時間:精確到毫秒。
  • 日志級別:打印 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 等級別日志信息。
  • 進程 ID:當前項目進程 ID 。
  • 分隔符--- 是分隔符,分隔符后面代表具體的日志內容。
  • 線程名:方括號中間的內容表示線程名稱。
  • 類名:當前日志打印所屬的類名稱。
  • 日志內容:開發人員設定的日志具體內容。

2.2 日志級別控制

有時候,我們想指定打印的日志的級別,可以通過配置文件來設置。

實例:

# 設置日志級別
logging.level.root=WARN

上面的配置表示項目日志的記錄級別為 WARN ,所以會打印 WARN 及優先級更高的 ERROR 級別的日志。此時我們編寫一個測試類,看看具體打印日志的情況。

實例:

@SpringBootTest
class LogTest {
	private Logger logger = LoggerFactory.getLogger(this.getClass());

	@Test
	void testPrintLog() {
		logger.trace("trace log");
		logger.debug("debug log");
		logger.info("info log");
		logger.warn("warn log");
		logger.error("error log");
	}
}

運行測試類,控制臺打印內容如下,說明我們指定的日志級別生效了。

圖片描述

控制臺打印指定級別日志

Tips: logging.level.root=WARN 中的 root 可以改為指定包名或類名,表示設置指定包或者類的日志級別。

2.3 輸出日志文件

控制臺日志保存的內容十分有限,大多數情況下我們需要將日志寫入文件,便于追溯。

可以通過配置文件指定日志文件,如下配置會將日志打印到 C:\\logs\\spring-boot-log.log 文件中。

實例:

# 設置日志文件
logging.file=C:\\logs\\spring-boot-log.log

也可以指定日志文件輸出的目錄, Spring Boot 項目會在指定輸出目錄下新建 spring.log 文件,并在文件中寫入日志。

實例:

# 設置日志目錄
logging.path=C:\\logs

Tips:如果同時配置了 logging.fileogging.path ,則只有 logging.file 生效。

2.4 使用 lombok 插件簡化日志代碼

在上面的示例中,如果要打印日志,需要添加一行代碼 private Logger logger = LoggerFactory.getLogger(this.getClass()); 還是比較麻煩的。我們可以安裝 lombok 插件,使用一個注解代替這行代碼。

2.4.1 下載 lombok 插件

lombok 下載鏈接 下載 lombok 插件。

2.4.2 安裝 lombok 插件

雙擊打開 lombok.jar ,點擊 Specify Location 按鈕,選擇 eclipse.exe ,然后點擊 Install 安裝插件。

圖片描述

lombok 插件安裝

2.4.3 引入 lombok 依賴

lombok 安裝后還需要引入依賴項,在 pom.xml 中添加如下依賴即可。

實例:

		<!-- lombok -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.12</version>
			<scope>provided</scope>
		</dependency>

2.4.4 使用注解輸出日志

此時,可以直接給類添加注解,然后就能直接輸出日志了。

實例:

@SpringBootTest
@Slf4j // 添加日志輸出注解
class LogTest {
	// 不再需要定義 logger
	// private Logger logger = LoggerFactory.getLogger(this.getClass());

	@Test
	void testPrintLog() {
		// 直接使用log輸出日志
		log.trace("trace log");
		log.debug("debug log");
		log.info("info log");
		log.warn("warn log");
		log.error("error log");
	}
}

Tips:lombok 插件的功能比較強大,不僅可以簡化日志模板代碼,還可以自動生成常用的 getter /setter/toString 等模板代碼,感興趣的同學可以查閱相關資料。

3. 自定義日志配置

Spring Boot 也支持自定義日志配置,可以直接采用指定日志系統的配置文件,如 logback 、 log4j 。以 logback 為例,可以直接在 application.properties 文件中指定 logback 配置文件。

實例:

# 指定logback配置文件,位于resources目錄下
logging.config=classpath:logback-spring.xml

Tips:使用 logback 日志系統后,日志級別與日志文件等信息都可以使用 logback-spring.xml 文件設置,不再需要從 properties 文件中設置了。

在生產環境,我們希望指定日志保存的位置,另外日志不能無限制一直保存,一般情況下保存最近 30 天左右的日志即可。這些都可以在 logback-spring.xml 文件中指定,此處給出一個完整實例供大家參考。

實例:

<?xml version="1.0" encoding="UTF-8"?>
<!-- logback 配置 -->
<configuration>
	<!-- 輸出到控制臺 -->
	<appender name="STDOUT"
		class="ch.qos.logback.core.ConsoleAppender">
		<encoder
			class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<!--格式化輸出:%d表示日期;%thread表示線程名;%-5level:左對齊并固定顯示5個字符;%msg:日志消息;%n:換行符; -->
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -
				%msg%n</pattern>
		</encoder>
	</appender>
	<!-- 輸出到文件 -->
	<appender name="FILE"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 正在打印的日志文件 -->
		<File>C:/logs/spring-boot-log.log</File>
		<encoder>
			<!--格式化輸出:%d表示日期;%thread表示線程名;%-5level:左對齊并固定顯示5個字符;%msg:日志消息;%n:換行符; -->
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -
				%msg%n
			</pattern>
		</encoder>
		<!-- 日志文件的滾動策略 -->
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 日志歸檔 -->
			<fileNamePattern>C:/logs/spring-boot-log-%d{yyyy-MM-dd}.log
			</fileNamePattern>
			<!-- 保留30天日志 -->
			<maxHistory>30</maxHistory>
		</rollingPolicy>
	</appender>
	<!-- 指定日志輸出的級別 -->
	<root level="INFO">
		<appender-ref ref="STDOUT" />
		<appender-ref ref="FILE" />
	</root>
</configuration>

logback 日志系統的功能比較全面,網上可以查詢到的資料也非常多,大家可以自行查閱以做進一步的了解。

4. 小結

Spring Boot 項目可以使用簡單的幾個配置,實現日志的打印,并設置相應的級別、日志文件等信息。

如果想要對日志的方方面面進行設定,也可以快速地集成常見的日志系統如 logback 、log4j 。

日志系統對生產環境項目來說是不可或缺的,大家可以選擇使用 Spring Boot 集成一種自己用起來順手的日志系統。