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