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-encoder6.x~7.x版本,Spring Boot 3.x对应8.x以上版本
验证方式
启动应用后检查日志输出:
- 业务日志保持原有JSON格式,包含timestamp、level等字段
- Trace日志直接输出原始JSON内容,无转义反斜杠与多余前缀,在Kibana中可展开为子字段
内容的提问来源于stack exchange,提问作者Ranseur
相关产品推荐
相关产品推荐

