文章40 | 阅读 30628 | 点赞0
本文主要分享 @Trace 注解想要追踪的任何方法。
我们首先看看 @Trace
的使用例子,再看看 @Trace
的实现代码。涉及代码如下:
本节参考官方文档:Application-toolkit-trace-CN.md
1、使用 Maven 引入相应的工具包
|
<dependency>
<groupId>org.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>${skywalking.version}</version>
</dependency>
|
2、在任何想要追踪的方法上添加 @Trace
注解,以 SpringMVC 为例子:
|
@Trace
@GetMapping("/log")
public String log() {
ActiveSpan.tag("mp", "芋道源码");
System.out.println("traceId:" + TraceContext.traceId());
return "log";
}
|
@Trace
注解的方法,会创建一个 LocalSpan 。ActiveSpan#tag(key, value)
方法,在 LocalSpan 上添加标签键值对。TraceContext.traceId#traceId
方法,获得全局链路追踪编号。3、执行后,我们看来看看 SkyWalking WEBUI 的展示。
友情提示:本小节需要胖友阅读过 《SkyWalking 源码分析 —— Agent 插件体系》 。
org.skywalking.apm.toolkit.activation.trace.TraceAnnotationActivation
,实现 ClassInstanceMethodsEnhancePluginDefine 抽象类,定义了方法切面,代码如下:
org.skywalking.apm.toolkit.activation.trace.TraceAnnotationMethodInterceptor
,实现 InstanceMethodsAroundInterceptor 接口,TraceAnnotationActivation 的拦截器。代码如下:
#beforeMethod(...)
方法,创建 LocalSpan 对象。代码如下:
第 42 至 46 行:获得操作名。若 @Trace#operationName()
非空,作为操作名。否则,调用 #generateOperationName(Method)
方法,使用方法签名。
第 49 行:调用 ContextManager#createLocalSpan(operationName)
方法,创建 LocalSpan 对象。
#afterMethod(...)
方法,调用 ContextManager#stopSpan()
方法,完成 LocalSpan 对象。
#handleMethodException(...)
方法,发生异常时,打印错误日志。
org.skywalking.apm.toolkit.activation.trace.ActiveSpanTagActivation
,实现 ClassStaticMethodsEnhancePluginDefine 抽象类,定义了方法切面,代码如下:
org.skywalking.apm.toolkit.activation.trace.TraceAnnotationMethodInterceptor
,实现 StaticMethodsAroundInterceptor 接口,ActiveSpanTag 的拦截器。代码如下:
#beforeMethod(...)
方法,添加 Span 的标签键值对。注意,可以不依赖 @Trace
注解。org.skywalking.apm.toolkit.activation.trace.TraceContextActivation
,实现 ClassStaticMethodsEnhancePluginDefine 抽象类,定义了方法切面,代码如下:
org.skywalking.apm.toolkit.activation.trace.TraceAnnotationMethodInterceptor
,实现 StaticMethodsAroundInterceptor 接口,TraceContextActivation 的拦截器。代码如下:
#afterMethod(...)
方法,调用 ContextManager#getGlobalTraceId()
方法,使用全局链路追踪编号,而不是原有结果。版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_42073629/article/details/119703770
内容来源于网络,如有侵权,请联系作者删除!