skywalking 8.8.0 logback 堆栈信息中打印 追踪ID
前提:
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>8.8.0</version>
</dependency>
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>8.8.0</version>
</dependency>
目前堆栈信息中不会包含traceId(网上的一些相关博文,在8.8.0无法直接使用,所以单独列出写了一篇)
但在接入阿里云的SLS之后,阿里云SLS的接口是根据关键词搜索日志,导致根据追踪ID,报错信息只能看到一行,剩余的堆栈信息都看不到,只能在SLS网页中查看相关日志的上下文才能确认实际的堆栈错误信息。
https://api.aliyun.com/api/Sls/2020-12-30/GetLogs?sdkStyle=dara&RegionId=cn-shanghai
https://api.aliyun.com/product/Sls
相关接入SLS的步骤我就不赘述了,直接看官网示例,有对应的依赖以及示例代码(注意,如果是内网,需要确认Endpoint的值,网址如上)
代码:
package com.xxx.config;
import ch.qos.logback.classic.pattern.ThrowableProxyConverter;
import ch.qos.logback.classic.spi.IThrowableProxy;
import ch.qos.logback.classic.spi.ThrowableProxyUtil;
import org.apache.skywalking.apm.toolkit.trace.TraceContext;
/*
* 堆栈日志添加追踪ID
* */
public class CustomTraceableConverter extends ThrowableProxyConverter {
@Override
protected String throwableProxyToString(IThrowableProxy tp) {
StringBuilder sb = new StringBuilder();
String traceId = TraceContext.traceId();
// 获取标准输出
String[] stackLines = ThrowableProxyUtil.asString(tp).split("\n");
for (String line : stackLines) {
if (!traceId.isEmpty()) {
sb.append("[").append(traceId).append("] ").append(line).append("\n");
} else {
sb.append(line).append("\n");
}
}
return sb.toString();
}
}
logback.xml中的部分(引入了自定义的Converter类,且在pattern中,添加了%customEx)
<configuration debug="false" scan="false">
...
<conversionRule conversionWord="customEx" converterClass="com.xxx.config.CustomTraceableConverter"/>
...
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{sw_ctx}] [%thread] %-5level %logger{36} -%msg%n%customEx</pattern>
</layout>
</encoder>
</appender>
...
<root level="info">
<appender-ref ref="console"/>
...
</root>
</configuration>

浙公网安备 33010602011771号