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

Spring Boot+OpenTelemetry:添加OpenTelemetryAppender且保留原控制台日志格式

解决方案

要在添加OpenTelemetryAppender的同时保留Spring Boot默认的带traceId/spanId的控制台日志格式,你可以直接复用Spring Boot内置的日志占位符,或者明确写出包含链路ID的完整pattern,具体实现如下:


1. 完整的Logback配置示例(logback-spring.xml)

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 引入Spring Boot默认日志基础配置,复用日期、异常格式等规则 -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

    <!-- 配置OpenTelemetry Appender -->
    <appender name="OTEL" class="io.opentelemetry.instrumentation.logback.appender.v1_0.OpenTelemetryAppender">
        <!-- 可根据需求添加OTEL配置,比如指定导出端点、服务名等 -->
        <!-- <exporter type="otlp" url="http://your-otel-collector:4317"/> -->
    </appender>

    <!-- 配置带traceId/spanId的ConsoleAppender -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!-- 完全复刻Spring Boot默认的带链路ID的日志格式 -->
            <pattern>%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr([%X{traceId:-},%X{spanId:-}]){yellow} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}</pattern>
        </encoder>
    </appender>

    <!-- 根日志关联两个Appender -->
    <root level="info">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="OTEL"/>
    </root>
</configuration>

2. 关键说明

  • 链路ID的注入:%X{traceId:-},%X{spanId:-}是获取MDC中链路ID的表达式,:-表示当MDC中没有这两个值时显示空字符串,避免日志报错。Spring Boot默认启用Observation功能(3.x默认开启,2.x需引入spring-boot-starter-actuator并开启Observation),会自动将traceId和spanId注入MDC。
  • 复用Spring Boot默认配置:使用${LOG_DATEFORMAT_PATTERN}、${LOG_LEVEL_PATTERN}等占位符,确保日志格式和Spring Boot原生默认行为一致,后续如果在application.properties中修改日志参数,配置也会同步生效。
  • 灵活修改方式:你也可以在application.properties中定义控制台日志格式,然后在Logback配置中引用:
    logging.pattern.console=%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr([%X{traceId:-},%X{spanId:-}]){yellow} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
    
    然后在Logback的encoder中替换为:
    <pattern>${logging.pattern.console}</pattern>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:25:20