Spring Boot 日志管理

1. 前言

誰能保證開發(fā)的軟件系統(tǒng)沒有問題?恐怕任何一個有經(jīng)驗的程序員都不敢承諾吧!

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

但是一個投入生產(chǎn)環(huán)境、擁有眾多用戶的軟件系統(tǒng)必然是一個復(fù)雜的系統(tǒng)工程,不經(jīng)歷現(xiàn)實(shí)的檢驗,沒有人能準(zhǔn)確地知道它到底會不會有問題。

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

2. Spring Boot 日志管理

2.1 默認(rèn)日志配置

Spring Boot 默認(rèn)已經(jīng)集成了日志功能,使用的是 logback 開源日志系統(tǒng)。

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

圖片描述

Spring Boot 項目啟動時控制臺輸出的內(nèi)容

Spring Boot 默認(rèn)的日志輸出內(nèi)容含義如下:

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

2.2 日志級別控制

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

實(shí)例:

# 設(shè)置日志級別
logging.level.root=WARN

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

實(shí)例:

@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");
	}
}

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

圖片描述

控制臺打印指定級別日志

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

2.3 輸出日志文件

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

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

實(shí)例:

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

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

實(shí)例:

# 設(shè)置日志目錄
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 ,點(diǎn)擊 Specify Location 按鈕,選擇 eclipse.exe ,然后點(diǎn)擊 Install 安裝插件。

圖片描述

lombok 插件安裝

2.4.3 引入 lombok 依賴

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

實(shí)例:

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

2.4.4 使用注解輸出日志

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

實(shí)例:

@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 插件的功能比較強(qiáng)大,不僅可以簡化日志模板代碼,還可以自動生成常用的 getter /setter/toString 等模板代碼,感興趣的同學(xué)可以查閱相關(guān)資料。

3. 自定義日志配置

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

實(shí)例:

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

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

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

實(shí)例:

<?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 日志系統(tǒng)的功能比較全面,網(wǎng)上可以查詢到的資料也非常多,大家可以自行查閱以做進(jìn)一步的了解。

4. 小結(jié)

Spring Boot 項目可以使用簡單的幾個配置,實(shí)現(xiàn)日志的打印,并設(shè)置相應(yīng)的級別、日志文件等信息。

如果想要對日志的方方面面進(jìn)行設(shè)定,也可以快速地集成常見的日志系統(tǒng)如 logback 、log4j 。

日志系統(tǒng)對生產(chǎn)環(huán)境項目來說是不可或缺的,大家可以選擇使用 Spring Boot 集成一種自己用起來順手的日志系統(tǒng)。

主站蜘蛛池模板: 波多野结衣AV一区二区三区中文| 国产精品毛片VA一区二区三区| 又硬又粗又大一区二区三区视频| 亚洲AV无码一区二区三区在线 | 自拍日韩亚洲一区在线| 亚洲一区日韩高清中文字幕亚洲| 无码人妻精品一区二区三区蜜桃 | 美女视频一区三区网站在线观看| 国产成人综合精品一区| 正在播放国产一区| 呦系列视频一区二区三区| 亚洲一区二区三区在线网站| 97久久精品午夜一区二区| 午夜视频在线观看一区| 亚洲AV无码一区二区三区在线| 精品亚洲A∨无码一区二区三区 | 97se色综合一区二区二区| 亚洲国产成人一区二区三区| 国产一区二区免费| 国产激情з∠视频一区二区| 久久一区二区精品综合| 亚洲一区二区影院| 精品视频一区二区三区免费| 久久精品免费一区二区三区 | 国产成人精品久久一区二区三区| 亚洲电影国产一区| 久久se精品一区精品二区| 日本精品高清一区二区| 国产主播一区二区| 久久人妻内射无码一区三区| 亚洲一区免费在线观看| 无码毛片一区二区三区视频免费播放 | 日本免费一区二区三区四区五六区| 中文字幕av无码一区二区三区电影| 亚洲永久无码3D动漫一区| 一区二区三区日韩| 色综合视频一区二区三区44| 国产精品久久久久一区二区| 国产91精品一区二区麻豆亚洲| 一区二区免费在线观看| 岛国无码av不卡一区二区|