链路追踪

文章40 |   阅读 30633 |   点赞0

来源:https://blog.csdn.net/weixin_42073629/category_9940428.html

SkyWalking 源码分析 —— traceId 集成到日志组件

x33g5p2x  于2021-12-21 转载在 其他  
字(1.0k)|赞(0)|评价(0)|浏览(826)

1. 概述

本文主要分享 traceId 集成到日志组件,例如 log4j 、log4j2 、logback 等等。

我们首先看看集成的使用例子,再看看集成的实现代码。涉及代码如下:

本文以 logback 1.x 为例子。

2. 使用例子

1、无需引入相应的工具包,只需启动参数带上 -javaagent:/Users/yunai/Java/skywalking/packages/skywalking-agent/skywalking-agent.jar 。

2、在 logback.xml 配置 %tid 占位符:

3、使用 logger.info(...) ,会打印日志如下:

注意,traceId 打印到每条日志里,最终需要经过例如 ELK ,收集到日志中心。

3. 实现代码

3.1 TraceIdPatternLogbackLayout

org.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout ,实现 ch.qos.logback.classic.PatternLayout 类,实现支持 %tid 的占位符。代码如下:

3.2 LogbackPatternConverterActivation

org.skywalking.apm.toolkit.activation.log.logback.v1.x.LogbackPatternConverterActivation ,实现 ClassInstanceMethodsEnhancePluginDefine 抽象类,定义了方法切面,代码如下:

org.skywalking.apm.toolkit.activation.log.logback.v1.x.PrintTraceIdInterceptor ,实现 InstanceMethodsAroundInterceptor 接口,LogbackPatternConverterActivation 的拦截器。代码如下:

  • #afterMethod(...) 方法,调用 ContextManager#getGlobalTraceId() 方法,使用全局链路追踪编号,而不是原有结果。

相关文章