当前位置: 欣欣网 > 码农

SpringBoot 指标监控及日志管理

2024-03-11码农

来源 :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端@EnableAdminServerpublic 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;@Controllerpublic classPrintLogController{privatefinal static Logger looger = LoggerFactory.getLogger(PrintLogController. class);@RequestMapping("/printlog")@ResponseBodypublic String showInfo(){ looger.info("记录日志");return"Hello Back!"; }}

如果日志过多,可以屏蔽一些包的日志,在配置文件中配置

# 屏蔽or包中的日志输出

#屏蔽org包中的日志输出logging.level.org=off

测试结果

热门推荐