为啥 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)