为啥 Sleuth 在我的 Spring Boot 服务中不能与 Log4j2 一起使用
Posted
技术标签:
【中文标题】为啥 Sleuth 在我的 Spring Boot 服务中不能与 Log4j2 一起使用【英文标题】:Why Sleuth doesn't work with Log4j2 in my Spring Boot service为什么 Sleuth 在我的 Spring Boot 服务中不能与 Log4j2 一起使用 【发布时间】:2019-06-20 16:41:09 【问题描述】:我有一个问题 - 为什么 Sleuth 不能与 Log4j2 一起使用?我已经排除了默认日志库并添加了 Log4j2 以在 application.properties filr 中使用其他一些功能
logging.file=myservice.log
logging.file.max-size= 500MB
logging.file.max-history=14
logging.level.pl.utlimo.*=INFO
我的 pom:
<?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 http://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.1.2.RELEASE</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 project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</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>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>$spring-cloud.version</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
</project>
我确实花了很多时间来解决我的问题。我应该怎么做才能将 Log4j2 与 Sleuth 一起使用?现在 Sleuth 没有追踪任何东西。
非常感谢您的帮助。 马修
【问题讨论】:
可能是spring.sleuth.log.slf4j.enabled=true
并记录 ID logging.pattern.level=[%XX-B3-TraceId/%XX-B3-SpanId] %-5p [%t] %C2 - %m%n
?
【参考方案1】:
在您的 log4j2.xml 中,尝试添加以下内容。
<PatternLayout pattern="[%dyyy-MM-dd HH:mm:ss:SSS] [%XX-B3-TraceId,%XX-B3-SpanId,%XX-B3-ParentSpanId,%XX-Span-Export] [%p] - %l - %m%n"/>
然后出于某种原因,在你的 application.yml 中指定 log4j2.xml 路径
logging.config=path/to/log4j2.xml
祝你好运!
【讨论】:
以上是关于为啥 Sleuth 在我的 Spring Boot 服务中不能与 Log4j2 一起使用的主要内容,如果未能解决你的问题,请参考以下文章
将 Spring Boot Profile 添加到 Sleuth/Zipkin 日志
spring cloud zipkin sleuth与spring boot aop结合后,启动慢
Spring sleuth with Spring Boot(日志相关) - Traceid 和 SpanId 未显示
Spring Cloud sleuth 依赖项在 Spring Boot 堆栈应用程序中抛出 RibbonLoadBalancerClientException
Spring Boot Sleuth - TraceI vs TraceIdString
springcloud --- spring cloud sleuth和zipkin日志管理(spring boot 2.18)