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
的占位符。代码如下:
- 第 33 行:添加 tid 的转换器为 org.skywalking.apm.toolkit.log.logback.v1.x.LogbackPatternConverter 类。
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() 方法,使用全局链路追踪编号,而不是原有结果。