一、前言
Spring Boot Admin 有一個強大的功能,就是實時在線查看日誌,並且可以動態更改日誌級別。
二、代碼演示
- 2.1 pom.xml 依賴添加(版本2.1.3)
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-client</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server-ui</artifactId>
</dependency>
- 2.2 logback.xml 日誌配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="CONTEXT_NAME" value="demo-server"/>
<property name="LOG_PATH" value="logs"/>
<property name="MAX_FILE_SIZE" value="100MB"/>
<property name="MAX_HISTORY" value="30"/>
<contextName>${CONTEXT_NAME}</contextName>
<!-- 彩色日誌 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex"
converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx"
converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<!-- 控制檯日誌樣式 -->
<property name="CONSOLE_LOG_PATTERN"
value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} [%L] %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!-- 文件日誌樣式 -->
<property name="FILE_LOG_PATTERN"
value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } [%t] %-40.40logger{39} %L : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!-- 禁用logback自身日誌輸出 -->
<statusListener class="ch.qos.logback.core.status.NopStatusListener"/>
<!-- 控制檯 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 運行日誌文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<file>${LOG_PATH}/demo-server.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/demo-server-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
<maxHistory>${MAX_HISTORY}</maxHistory>
</rollingPolicy>
</appender>
<!-- 錯誤日誌文件 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<file>${LOG_PATH}/demo-server-error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/sznsh-business-server-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
<maxHistory>${MAX_HISTORY}</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 異步寫日誌 -->
<appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>1024</queueSize>
<appender-ref ref="FILE"/>
</appender>
<appender name="ASYNC_ERROR_FILE" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>1024</queueSize>
<appender-ref ref="ERROR_FILE"/>
</appender>
<!-- 不同環境的日誌級別配置 -->
<springProfile name="local">
<logger name="com.test.demo" level="DEBUG"/>
</springProfile>
<!-- 解決SpringBootAdmin錯誤日誌問題 -->
<logger name="org.apache.catalina.connector.CoyoteAdapter" level="OFF"/>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="ASYNC_FILE"/>
<appender-ref ref="ASYNC_ERROR_FILE"/>
</root>
</configuration>
注意:其中重要的是<appender name="FILE" /> ,如果不寫將導致springbootadmin找不到文件,無法查看日誌
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
- 2.3 Application.java 添加@EnableAdminServer
@SpringBootApplication
@EnableAdminServer
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
- 2.4 application.yum 配置
########################################################
### spring 配置
########################################################
spring:
application:
name: demo-server
http:
encoding:
charset: UTF-8
enabled: true
force: true
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
banner:
charset: UTF-8
location: classpath:config/banner.txt
########################################################
### 訪問路徑、端口tomcat
########################################################
server:
port: 8080
servlet:
contextPath: /demo-server
tomcat:
max-threads: 1000
min-spare-threads: 30
uri-encoding: UTF-8
############################## Spring boot admin start ##############################
---
spring:
boot:
admin:
client:
url: http://localhost:${server.port}/${server.servlet.context-path}
# 開啓和暴露所有端點
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: ALWAYS
logfile:
enabled: true #可在線查看日誌
########################################################
### Log configuration
### 方便Spring Boot Admin頁面上實時查看日誌
### logback.xml中有詳細的日誌配置
########################################################
logging:
config: classpath:config/logback.xml
level:
root: ${LOG_LEVEL:INFO}
com.test.demo: info
# 方便Spring Boot Admin頁面上實時查看日誌
file: logs/demo-server.log
其中banner.txt可自行設計,主要用於啓動的時候界面展示,也可使用默認springboot的圖標
三、SpringBoot Admin導致swagger-ui.html訪問不了
在添加spring boot admin後項目有可能會遇到swagger-ui打不開的情況,需要在WebMvcConfigurer的集成類中添加以下配置:
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
/**
* 頁面路徑配置
*
* @param configure 路徑配置
*/
@Override
public void configurePathMatch(PathMatchConfigurer configure) {
// 忽視路徑中的 .
configure.setUseSuffixPatternMatch(false);
}
/**
* 多時區轉換 根據頁面路徑參數轉化 ?lang=en_US
*
* @return LocaleChangeInterceptor
*/
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
lci.setParamName("lang");
return lci;
}
/**
* 靜態資源配置
*
* @param registry ResourceHandlerRegistry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// common resource加載順序
registry.addResourceHandler("/**")
.addResourceLocations("file:./static/")
.addResourceLocations("classpath:/resources/")
.addResourceLocations("classpath:/static/")
.addResourceLocations("classpath:/public/")
.addResourceLocations("classpath:/META-INF/resources/");
// web jars swagger-ui knife4j
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("doc.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
主要是重寫addResourceHandlers方法,其他有需要的可按需添加。