Spring Cloud Sleuth 日志中的应用程序名称不正确
Posted
技术标签:
【中文标题】Spring Cloud Sleuth 日志中的应用程序名称不正确【英文标题】:Incorrect application name in Spring Cloud Sleuth logs 【发布时间】:2017-03-06 00:54:02 【问题描述】:我有两个 Spring Boot 应用程序 - Application1 和 Application2。这两个应用程序都使用 Spring Cloud Sleuth。两个应用程序都部署在同一个外部 tomcat 上。以下是配置的详细信息 - - 为了提供应用程序名称,我在资源文件夹中为每个应用程序添加了单独的 bootstrap.yml 文件。 - 我还在 bootstrap.yml 文件中提供了活动配置文件。 - 应用程序名称也添加到 application-$profile.properties 文件中。 - 之后我在类路径中添加了 logback-spring.xml。 现在,当我使用两个应用程序启动 tomcat 服务器时,我在两个应用程序的 Spring Cloud Sleuth 日志中都获得了第一个应用程序名称。
我正在使用 Spring boot 1.4.1 和 Spring cloud sleuth 1.0.10
编辑: 我在 bootstrap.yml 中添加了应用程序名称,但我仍然面临同样的问题
【问题讨论】:
【参考方案1】:正如我们在文档中所写(我认为我们确实写过),在提供自定义 logback 时,您必须在引导 yaml 中提供名称。请查看我们描述如何使用自定义 logback 的文档。 http://cloud.spring.io/spring-cloud-sleuth/spring-cloud-sleuth.html
【讨论】:
对不起,我忘了在我的问题中提到它,我在 bootstrap.yml 文件中添加了应用程序名称,但我仍然面临同样的问题 Loggers 被设计成每个 JVM 都是全局的。我什至不确定在同一个过程中是否有可能有两种不同的输出格式。可能是,但我从未尝试过。 如果我使用默认的 Spring Boot 日志记录,它会按预期工作。只有使用自定义 logback-spring.xml 我才面临这个问题。是否可以在默认的 spring boot logger 中添加 appender? 不知道。如果您认为同一个 JVM 中的多个logback-spring.xml
应该可以工作,但事实并非如此,那么您可以在 Spring Boot 中提出问题。
您是否查看了我们如何在自定义 logback 中修复它的文档?【参考方案2】:
我们在项目中遇到了类似的问题,我们在一个 ibm liberty Web 容器中部署了两个 Spring Boot War。我们通过提供自定义 logback-spring.xml 来修复它。以下是修复它的配置: logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<springProperty scope="context" name="springAppName" source="spring.application.name"/>
<property name="LOG_LEVEL_PATTERN" value="%clr(%5p) %clr([$springAppName,%XX-B3-TraceId:-,%XX-B3-SpanId:-,%XX-Span-Export:-])yellow" />
<!-- You can override this to have a custom pattern -->
<property name="CONSOLE_LOG_PATTERN"
value="%clr(%dyyyy-MM-dd HH:mm:ss.SSS)faint %clr($LOG_LEVEL_PATTERN:-%5p) %clr($PID:- )magenta %clr(---)faint %clr([%15.15t])faint %clr(%-40.40logger39)cyan %clr(:)faint %m%n$LOG_EXCEPTION_CONVERSION_WORD:-%wEx"/>
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>$CONSOLE_LOG_PATTERN</pattern>
</encoder>
<file>$server.output.dirlogs/myapplication1.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>$server.output.dirlogs/myapplication1%dyyyy-MM-dd.log</fileNamePattern>
<!--<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">-->
<!--<maxFileSize>1MB</maxFileSize>-->
<!--</timeBasedFileNamingAndTriggeringPolicy>-->
</rollingPolicy>
</appender>
<logger name="com.sample.controllers.MyController" level="DEBUG" additivity="false">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</logger>
<logger name="org.springframework.jdbc.core.StatementCreatorUtils" level="TRACE" additivity="false">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</logger>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
确保它被 maven 包含在类路径中
<profiles>
<profile>
<id>default</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/application.properties</include>
<include>**/*.xml</include>
<include>**/*.yml</include>
</includes>
</resource>
</resources>
</build>
</profile>
</profiles>
并在您的 src/main/resources/bootstrap.yml 中添加以下条目
弹簧: 应用: 名称:myapplication1 杰姆斯: 默认域:myapplication1
在具有不同应用程序名称的两个 Spring Boot 应用程序中的每一个中都有此配置
【讨论】:
以上是关于Spring Cloud Sleuth 日志中的应用程序名称不正确的主要内容,如果未能解决你的问题,请参考以下文章
将 Spring Boot Profile 添加到 Sleuth/Zipkin 日志
Spring Cloud Alibaba(15)---Sleuth+Zipkin
spring cloud sleuth 如何将跟踪信息添加到 logback 日志行
spring cloud sleuth 自定义traceId, spanId日志pattern