在 log4j2 模式布局中使用 Sleuth 跟踪和跨度 id

Posted

技术标签:

【中文标题】在 log4j2 模式布局中使用 Sleuth 跟踪和跨度 id【英文标题】:Use Sleuth trace-and span id in log4j2 patternlayout 【发布时间】:2020-01-26 20:52:15 【问题描述】:

我想在 log4j2 中使用 sleuth。因此我使用了 .properties 配置。问题是我无法使用我的模式布局将侦探参数获取到日志中。 你能告诉我使用哪种模式来获取侦探参数。就我而言,它们总是空的。

我做了什么: 就像提到的here [%XspanId] 并设置 spring.sleuth.log.slf4j.enabled=false

我的整个模式是这样的:

date: %dISO8601 loglevel: %Xloglevel [%XspanId] user-agent: %Xuseragent servicename: %Xservicename class:%Xclassname method:%Xmethode Line: %L message: %m%n

要插入数据,我使用 ThreadContext 对象:

ThreadContext.put("trace", logdata.getTrace());

当我以这种方式插入时,我会得到以下示例:

NoopSpan(91406b61b7d23455/05657a824bc5c9e2)

但我想将数据拆分,以便将其与 elk 堆栈一起使用

编辑: 当我使用

System.out.prinln(MDC.get("X-B3_TraceId"))

在我的控制器类中,我得到了正确的输出。但是当我在我的模式中使用 %XX-B3_TraceId 时,输出为空。

更新: %XX-B3_TraceId 有效。我的异步日志记录工作流程有问题。

【问题讨论】:

【参考方案1】:

试试这个模式:

 <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.error_file.layout.type = PatternLayout 和 appender.error_file.layout.pattern = 你提到的模式时,我得到以下信息:%clr(2019-09-27 08:00 :55.375)faint %clr(ERROR) %clr( )magenta %clr(---)faint %clr([pool-2-thread-1])faint %clr(error_logger )青色 %clr(:)faint 这是一个错误日志。 一般来说,我只需要知道跟踪和跨度 id 是否在 ThreadContext 中,以及如何将它们集成到我的日志记录模式中

以上是关于在 log4j2 模式布局中使用 Sleuth 跟踪和跨度 id的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Sleuth使用简介

Spring Cloud Sleuth使用简介

【日志】Log4j2配置

默认 Spring Boot log4j2 日志模式

log4j2强大的日志框架

log4j2 RollingFile Appender 需要日期模式