SpringBoot3 micrometer-tracing 日志格式配置
说明
在SpringBoot2版本时,分布式链路追踪的traceId使用的是sleuth,日志的格式为"[traceId,spanId]“。
但是升级到SpringBoot3版本后,链路追踪组件已经替换为micrometer-tracing,它默认的日志格式为”[traceId-spanId]"。因此想要保持之前的风格,就得额外的配置。
一、SpringBoot3项目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>3.4.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>demo</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing-bridge-brave</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
二、核心修改,主要是修改application的配置文件
logging:
pattern:
# 修改默认的时间格式
dateformat: "yyyy-MM-dd HH:mm:ss.SSS"
# 修改日志链路的格式,以及添加自定义信息(loginId)
correlation: "[%X{traceId:-},%X{spanId:-},%X{loginId:-}] "
# 日志不打印应用名称
include-application-name: false
三、SpringBoot2时的配置
logging:
pattern:
level: "%5p [%X{traceId:-},%X{spanId:-},%X{loginId:-}]"
四、额外-logback日志配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!-- SpringBoot默认logback的配置 -->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 日志文件保存位置 -->
<property name="LOG_HOME" value="log"/>
<!-- 控制台日志格式 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 日志文件格式 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/spring.log</file>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 滚动后的日志文件命名模式 -->
<fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/spring.%d{yyyy-MM-dd-HH}.%i.log</fileNamePattern>
<!-- 日志文件的最大大小 -->
<maxFileSize>20MB</maxFileSize>
<!-- 最大保留30天的日志 -->
<maxHistory>20</maxHistory>
<!-- 总日志文件大小不超过3GB -->
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
</appender>
<!-- 错误日志文件格式 -->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/error.log</file>
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 滚动后的日志文件命名模式 -->
<fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/error.%d{yyyy-MM-dd-HH}.%i.log</fileNamePattern>
<!-- 日志文件的最大大小 -->
<maxFileSize>20MB</maxFileSize>
<!-- 最大保留30天的日志 -->
<maxHistory>20</maxHistory>
<!-- 总日志文件大小不超过3GB -->
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
<appender-ref ref="ERROR"/>
</root>
</configuration>