spring boot 日志管理(不登录服务器如何在线查看spring)

当前,应用系统微服务架构、前后端分离(前端vue,后端springboot),已经成为大部分项目的标准技术架构,但在项目上线后,spring boot后端服务部署在服务器上,大部分公司对服务器都有安全管理要求,一般开发人员无法登录服务器,就不能查看到后台日志,经常遇到应用系统报错,但看不到后台详细服务日志,导致程序员不能很快定位错误。基于此,可以使用Spring Boot Admin组件集成整合spring boot工程,可以实现在线实时查看后端服务日志,就不用再去服务器管理员去服务器本地查看了。

Spring Boot Admin组件可以集成单体的spring boot工程,也可以通过服务注册发现中心,集成多个spring boot微服务应用。

本文重点介绍如果集成单体Springboot工程,这种架构项目上使用的最多,部署起来也比较简单。

一、Spring Boot Admin简介

Spring Boot Admin是一个开源社区项目,用于管理和监控SpringBoot应用程序。 应用程序作为Spring Boot Admin Client向为Spring Boot Admin Server注册(通过HTTP)或使用SpringCloud注册中心(例如Eureka,Consul)发现。 UI是的AngularJs应用程序,展示Spring Boot Admin Client的Actuator端点上的一些监控。

常见的功能或者监控如下:

  • 显示健康状况
  • 显示详细信息,例如
  • JVM和内存指标
  • micrometer.io指标
  • 数据源指标
  • 缓存指标
  • 显示构建信息编号
  • 关注并下载日志文件
  • 查看jvm系统和环境属性
  • 查看Spring Boot配置属性
  • 支持Spring Cloud的postable / env-和/ refresh-endpoint
  • 轻松的日志级管理
  • 与JMX-beans交互
  • 查看线程转储
  • 查看http跟踪
  • 查看auditevents
  • 查看http-endpoints
  • 查看计划任务
  • 查看和删除活动会话(使用spring-session)
  • 查看Flyway / Liquibase数据库迁移
  • 下载heapdump
  • 状态变更通知(通过电子邮件,Slack,Hipchat,……)
  • 状态更改的事件日志(非持久性)
二、创建Spring Boot Admin Server

首先创建一个Spring Boot工程,本文的所有工程的Spring Boot版本为2.7.3 ,JDK版本1.8,spring-boot-admin-starter-server版本为2.5.1。

1、修改pom文件

完整的pom.xml文件如下

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.3</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>boot-admin-server</artifactId> <version>0.0.1-SNAPSHOT</version> <name>boot-admin-server</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <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> <version>2.5.1</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>

2、新建BootAdminServerApplication启动类

然后在工程的启动类BootAdminServerApplication

加上@EnableAdminServer注解,开启AdminServer的功能,代码如下:

package com.example.server; import de.codecentric.boot.admin.server.config.EnableAdminServer; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @EnableAdminServer public class BootAdminServerApplication { public static void main(String[] args) { SpringApplication.run(BootAdminServerApplication.class, args); } }

3、修改application.yml配置

在工程的配置文件application.yml中配置程序名和程序的端口,代码如下:

server: port: 9091 spring: application: name: boot-admin-server

4、启动访问spring boot admin

启动应用,访问http://127.0.0.1:9091

因为当前还没有springboot应用接入,所有登录后看到的是0个应用。

spring boot 日志管理(不登录服务器如何在线查看spring)(1)

三、创建Spring Boot Admin Client

首先创建一个Spring Boot工程,本文的所有工程的Spring Boot版本为2.7.3 ,JDK版本1.8,spring-boot-admin-starter-client版本为2.5.1。

1、修改pom文件

完整的pom.xml文件如下

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.3</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>boot-admin-client</artifactId> <version>0.0.1-SNAPSHOT</version> <name>boot-admin-client</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>2.5.1</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>

2、新建BootAdminClientApplication启动类

然后在工程的启动类BootAdminClientApplication,代码如下:

package com.example.client; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class BootAdminClientApplication { public static void main(String[] args) { SpringApplication.run(BootAdminClientApplication.class, args); } }

增加一个Controller测试类,用于后面验证生成后台日志信息。

package com.example.client; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import java.util.Date; @Controller @RequestMapping("/test") public class HelloController { private static final Logger log = LoggerFactory.getLogger(HelloController.class); @GetMapping("/hello") public String hello(){ String s = "hello," new Date(); log.error(s); return s; } }

3、修改application.yml配置

在工程的配置文件application.yml中配置程序名和程序的端口,以及向admin-server注册的地址为http://localhost: 9091,日志文件的路径logging.file.name,并暴露自己的actuator的所有端口信息,代码如下:

server: port: 8080 spring: application: name: boot-admin-client boot: admin: client: url: http://localhost:9091 #系统日志配置 logging: #spring admin boot日志输出配置,需要跟logback-spring.xml配置中日志路径一致 file: name: logs/boot-admin-client/error.log # 服务端点检查 management: endpoints: web: exposure: include: "*" endpoint: health: show-details: always

4、增加logback-spring.xml日志配置文件

本配置文件可根据项目需求修改,符合logback标准即可,注意log.path的路径要与application.yml文件中指定的路径一致。

<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <!-- 日志存放路径 --> <property name="log.path" value="logs/boot-admin-client" /> <!-- 日志输出格式 --> <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" /> <!-- 控制台输出 --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%highlight${log.pattern}</pattern> </encoder> </appender> <!-- 系统日志输出 --> <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/info.log</file> <!-- 循环政策:基于时间创建日志文件 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 日志文件名格式 --> <fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 日志最大的历史 30天 --> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- 过滤的级别 --> <level>INFO</level> <!-- 匹配时的操作:接收(记录) --> <onMatch>ACCEPT</onMatch> <!-- 不匹配时的操作:拒绝(不记录) --> <onMismatch>DENY</onMismatch> </filter> </appender> <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/error.log</file> <!-- 循环政策:基于时间创建日志文件 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 日志文件名格式 --> <fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 日志最大的历史 30天 --> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- 过滤的级别 --> <level>ERROR</level> <!-- 匹配时的操作:接收(记录) --> <onMatch>ACCEPT</onMatch> <!-- 不匹配时的操作:拒绝(不记录) --> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 系统模块日志级别控制 --> <logger name="com.yuncheng" level="info" /> <!-- Spring日志级别控制 --> <logger name="org.springframework" level="warn" /> <!--myibatis log configure --> <logger name="com.apache.ibatis" level="warn" /> <logger name="java.sql.Connection" level="warn" /> <logger name="java.sql.Statement" level="warn" /> <logger name="java.sql.PreparedStatement" level="warn" /> <root level="info"> <appender-ref ref="console" /> </root> <!--系统操作日志--> <root level="info"> <appender-ref ref="file_info" /> <appender-ref ref="file_error" /> </root> </configuration>

5、启动访问,在线查看日志

启动该应用后,访问http://127.0.0.1:8080/test/hello,模拟生成后台错误日志,此时查看spring boot admin界面,发现有1个应用已经接入。

spring boot 日志管理(不登录服务器如何在线查看spring)(2)

点击进入,可以查看该应用的基本性能监控信息

spring boot 日志管理(不登录服务器如何在线查看spring)(3)

点击进入日志菜单,看到spring boot 后台服务日志在线实时显示出来了,这样就不用再找服务器管理员看日志了。

spring boot 日志管理(不登录服务器如何在线查看spring)(4)

也可以在线调整服务端日志级别,比如可以把日志级别从INFO调整到DEBUG,这样程序员开发调试代码也很方便了。

spring boot 日志管理(不登录服务器如何在线查看spring)(5)

以上文档描述了Spring Boot Admin如何集成监控spring boot单体应用,如何在线查看spring boot后台日志,Spring Boot Admin也可通过服务注册发现中心Nacos监控多个spring boot微服务。

spring boot 日志管理(不登录服务器如何在线查看spring)(6)

详细文章见:

https://yunchengxc.yuque.com/books/share/f9f667ff-8c2e-41f4-b1bf-052dc872186f/evsv1k

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页