《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》

摘要: 原创出处 http://www.iocoder.cn/SkyWalking/agent-plugin-tomcat/ 「芋道源码」欢迎转载,保留摘要,谢谢!

本文主要基于 SkyWalking 3.2.6 正式版


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

1. 概述

本文主要分享 SkyWalking Agent Tomcat 插件。涉及到的代码不多,如下图:

2. TomcatInstrumentation

skywalking-plugin.def 里,定义了插件,如下图:


org.skywalking.apm.plugin.tomcat78x.define.TomcatInstrumentation ,实现 ClassInstanceMethodsEnhancePluginDefine 抽象类,定义了方法切面,代码如下:

2.1 TomcatInvokeInterceptor

org.skywalking.apm.plugin.tomcat78x.TomcatInvokeInterceptor ,实现 InstanceMethodsAroundInterceptor 接口,TomcatInstrumentation 的拦截器。代码如下:

2.2 TomcatExceptionInterceptor

org.skywalking.apm.plugin.tomcat78x.TomcatExceptionInterceptor ,实现 InstanceMethodsAroundInterceptor 接口,TomcatInstrumentation 的拦截器。代码如下:

  • #beforeMethod(...) 方法,处理异常。代码如下:
    • 第 35 行:调用 AbstractSpan#errorOccurred() 方法,标记 EntrySpan 对象发生异常。
    • 第 35 行:调用 AbstractSpan#log(Throwable) 方法,记录异常日志到 EntrySpan 对象。

666. 彩蛋

知识星球

一大波插件来袭!

胖友,分享一波朋友圈。

文章目录
  1. 1. 1. 概述
  2. 2. 2. TomcatInstrumentation
    1. 2.1. 2.1 TomcatInvokeInterceptor
    2. 2.2. 2.2 TomcatExceptionInterceptor
  3. 3. 666. 彩蛋