Spring Boot Actuator可以帮助程序员监控和管理SpringBoot应用,比如健康检查、内存使用情况统计、线程使用情况统计等。我们在SpringBoot项目中添加Actuator功能,即可使用Actuator监控项目,用法如下:
在被监控的项目中添加Actuator起步依赖
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
在配置文件中开启所有监控端点
#开启所有监控端点
management.endpoints.web.exposure.include=*
测试:
访问项目:http://localhost:8080/actuator
可以看到有很多json格式的字符串,这些都是该路径下的相关资源信息,并且通过URL可以调用actuator的功能:
URL | 查看的数据 |
---|
/env | 环境属性 |
/health | 健康检查 |
/mappings | 显示所有的@RequestMapping 路径 |
/loggers | 日志 |
/info | 定制信息 |
/metrics | 查看内存、CPU核心等系统参数 |
/trace | 用户请求信息 |
例如查询日志信息数据,访问localhost:8080/actuator/loggers
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
- 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
- 视频教程:https://doc.iocoder.cn/video/
Actuator使用JSON格式展示了大量指标数据,不利于我们查看,我们可以使用可视化工具Spring Boot Admin查看actuator生成指标数据。Spring Boot Admin是一个独立的项目,我们需要创建并运行该项目。
创建SpringBoot项目,添加SpringMVC和Spring Boot Admin服务端起步依赖
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>de.codecentricgroupId>
<artifactId>spring-boot-admin-starter-serverartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
dependencies>
修改配置文件
因为这里是服务端项目,要监控其他项目,因此要单独设置一个端口,就为9090吧,然后再自定义一下日志格式
> 基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
>
> * 项目地址:
> * 视频教程:
# 端口号
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 class SpringbootadminApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootadminApplication.class, args);
}
}
运行项目
这里是还没有连接项目进行指标监控的
同样地,被监控项目添加Spring Boot Admin客户端起步依赖
<dependency>
<groupId>de.codecentricgroupId>
<artifactId>spring-boot-admin-starter-clientartifactId>
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默认使用Logback组件作为日志管理。Logback是log4j创始人设计的一个开源日志组件。
在SpringBoot项目中我们不需要额外的添加Logback的依赖,因为在 spring-boot-parent
中已经包含了Logback的依赖。
在 /resources
下添加Logback配置文件logback.xml
<configuration>
<property name="LOG_HOME" value="${catalina.base}/logs/"/>
<appender name="Stdout" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
pattern>
layout>
appender>
<appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/server.%d{yy99-MM-dd}.logFileNamePattern>
<MaxHistory>30MaxHistory>
rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
pattern>
layout>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MBMaxFileSize>
triggeringPolicy>
appender>
<root level="info">
<appender-ref ref="Stdout"/>
<appender-ref ref="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 class PrintLogController {
private final static Logger looger = LoggerFactory.getLogger(PrintLogController.class);
@RequestMapping("/printlog")
@ResponseBody
public String showInfo(){
looger.info("记录日志");
return "Hello Back!";
}
}
如果日志过多,可以屏蔽一些包的日志,在配置文件中配置
#屏蔽org包中的日志输出
logging.level.org=off
测试结果