You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot日志优化:移除Trace日志前缀并处理LoggingSpanReporter日志

解决方案

核心思路

通过Logback的**分流追加器(SiftingAppender)**按日志记录器名称区分两类日志:

  • 对c.c.s.config.sleuth.LoggingSpanReporter生成的Trace日志,直接输出message字段里的原始JSON内容,跳过转义与多余前缀
  • 对业务日志,保留原有JSON格式化逻辑

修改后的logback-spring.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 业务日志的JSON编码器(保留原有配置) -->
    <encoder name="businessJsonEncoder" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
        <providers>
            <!-- 保留你原有的业务日志字段配置,比如时间戳、日志器、级别等 -->
            <timestamp/>
            <loggerName/>
            <level/>
            <message/>
            <!-- 其他业务需要的字段... -->
        </providers>
    </encoder>

    <!-- Trace日志的原始JSON编码器 -->
    <encoder name="traceRawJsonEncoder" class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <!-- 直接输出message原始内容,不做转义处理 -->
            <pattern>%msg</pattern>
        </layout>
    </encoder>

    <!-- 分流追加器:按logger名称区分日志 -->
    <appender name="SIFTING_APPENDER" class="ch.qos.logback.classic.sift.SiftingAppender">
        <discriminator>
            <key>loggerName</key>
            <defaultValue>business</defaultValue>
        </discriminator>
        <sift>
            <!-- 匹配LoggingSpanReporter的日志 -->
            <appender name="TRACE-${loggerName}" class="ch.qos.logback.core.ConsoleAppender">
                <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
                    <evaluator>
                        <expression>loggerName.equals("c.c.s.config.sleuth.LoggingSpanReporter")</expression>
                    </evaluator>
                    <OnMismatch>DENY</OnMismatch>
                    <OnMatch>ACCEPT</OnMatch>
                </filter>
                <encoder ref="traceRawJsonEncoder"/>
            </appender>

            <!-- 其他业务日志 -->
            <appender name="BUSINESS-${loggerName}" class="ch.qos.logback.core.ConsoleAppender">
                <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
                    <evaluator>
                        <expression>!loggerName.equals("c.c.s.config.sleuth.LoggingSpanReporter")</expression>
                    </evaluator>
                    <OnMismatch>DENY</OnMismatch>
                    <OnMatch>ACCEPT</OnMatch>
                </filter>
                <encoder ref="businessJsonEncoder"/>
            </appender>
        </sift>
    </appender>

    <!-- 根日志配置 -->
    <root level="INFO">
        <appender-ref ref="SIFTING_APPENDER"/>
    </root>
</configuration>

关键说明

  • 分流逻辑:通过SiftingAppender结合EvaluatorFilter精准匹配目标日志记录器,避免两类日志互相干扰
  • Trace日志处理:用PatternLayout直接输出%msg,保留原始JSON结构,Kibana可直接解析为子字段
  • 避免编译错误:确保logback-classic和logstash-logback-encoder依赖版本与Spring Boot兼容,比如Spring Boot 2.x对应logstash-logback-encoder 6.x~7.x版本,Spring Boot 3.x对应8.x以上版本

验证方式

启动应用后检查日志输出:

  • 业务日志保持原有JSON格式,包含timestamp、level等字段
  • Trace日志直接输出原始JSON内容,无转义反斜杠与多余前缀,在Kibana中可展开为子字段

内容的提问来源于stack exchange,提问作者Ranseur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 11:37:16