來源 :https://blog.csdn.net/qq_53317005/article/details/133486209
# 添加Actuator功能
Spring Boot Actuator可以幫助程式設計師監控和管理SpringBoot套用,比如健康檢查、記憶體使用情況統計、執行緒使用情況統計等。我們在SpringBoot計畫中添加Actuator功能,即可使用Actuator監控
計畫,用法如下:
在被監控的計畫中添加Actuator起步依賴
<!-- 指標監控 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
在配置檔中開啟所有監控端點
#開啟所有監控端點
management.endpoints.web.exposure.include=*
測試:
存取計畫:http://localhost:8080/actuator
可以看到有很多json格式的字串,這些都是該路徑下的相關資源資訊,並且透過URL可以呼叫actuator的功能:
例如查詢日誌資訊數據,存取localhost:8080/actuator/loggers
# SpringBoot指標監控 Spring Boot Admin
Actuator使用JSON格式展示了大量指標數據,不利於我們檢視,我們可以使用視覺化工具Spring Boot Admin檢視actuator生成指標數據。Spring Boot Admin是一個獨立的計畫,我們需要建立並運
行該計畫。
1. 建立Spring Boot Admin伺服端計畫
建立SpringBoot計畫,添加SpringMVC和Spring Boot Admin伺服端起步依賴
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
修改配置檔
因為這裏是伺服端計畫,要監控其他計畫,因此要單獨設定一個埠,就為9090吧,然後再自訂一下日誌格式
# 埠號
server.port=9090
#日誌格式
logging.pattern.console=%d{YYYY-MM-dd HH:mm:ss.SSS} %clr(%-5level) --- [%-15thread] %cyan(%-50logger{50}):%msg%n
修改啟動類
這裏我們需要在啟動類上方添加註解,證明這是一個指標監控伺服端
package com.example.springbootadmin;
import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
// 開啟SpringBoot Admin Server端
@EnableAdminServer
public classSpringbootadminApplication{
publicstaticvoidmain(String[] args){
SpringApplication.run(SpringbootadminApplication. class, args);
}
}
執行計畫
這裏是還沒有連線計畫進行指標監控的
2. 連線Spring Boot Admin計畫
同樣地,被監控計畫添加Spring Boot Admin客戶端起步依賴
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
修改配置檔
# 套用服務 WEB 存取埠
server.port=8080
#Spring boot admin存取地址
spring.boot.admin.client.url=http://localhost:9090
#日誌格式
logging.pattern.console=%d{YYYY-MM-dd HH:mm:ss.SSS} %clr(%-5level) --- [%-15thread] %cyan(%-50logger{50}):%msg%n
執行計畫
此時Spring Boot Admin即可連線被監控的計畫,再重新整理就可以看到有例項連線成功。
# SpringBoot日誌管理
SpringBoot預設使用Logback元件作為日誌管理。Logback是log4j創始人設計的一個開源日誌元件。在SpringBoot計畫中我們不需要額外的添加Logback的依賴,因為在 spring-boot-parent 中已經包含了Logback的依賴。
在 /resources 下添加Logback配置檔logback.xml
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!--定義日誌檔的儲存地址-->
<propertyname="LOG_HOME"value="${catalina.base}/logs/"/>
<!-- 控制台輸出 -->
<appendername="Stdout" class="ch.qos.logback.core.ConsoleAppender">
<!-- 日誌輸出編碼 -->
<layout class="ch.qos.logback. classic.PatternLayout">
<!--格式化輸出:%d表示時間,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度%msg:日誌訊息,%n是換行符-->
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
</layout>
</appender>
<!-- 按照每天生成日誌檔 -->
<appendername="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日誌檔輸出的檔名-->
<FileNamePattern>${LOG_HOME}/server.%d{yy99-MM-dd}.log</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<layout class="ch.qos.logback. classic.PatternLayout">
<!--格式化輸出:%d表示時間,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度%msg:日誌訊息,%n是換行符-->
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
</layout>
<!--日誌檔最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 日誌輸出級別 -->
<rootlevel="info">
<appender-refref="Stdout"/>
<appender-refref="RollingFile"/>
</root>
</configuration>
註:Logback配置檔名為logback-test.xml或logback.xml,如果 classpath下沒有這兩個檔,LogBack會自動進行最小化配置。
執行結果如下圖:
在程式碼中打印日誌
package com.example.springbootdlogback.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public classPrintLogController{
privatefinal static Logger looger = LoggerFactory.getLogger(PrintLogController. class);
@RequestMapping("/printlog")
@ResponseBody
public String showInfo(){
looger.info("記錄日誌");
return"Hello Back!";
}
}
如果日誌過多,可以遮蔽一些包的日誌,在配置檔中配置
# 遮蔽or包中的日誌輸出
#遮蔽org包中的日誌輸出
logging.level.org=off
測試結果
熱門推薦