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

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() 方法,使用全局链路追踪编号,而不是原有结果。