SpringBoot整合 Spring Boot Admin - 在線動態查看日誌

一、前言

  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方法,其他有需要的可按需添加。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章