# springBoot 调用链路追踪 **Repository Path**: a-cold-boy/call-link-tracing ## Basic Information - **Project Name**: springBoot 调用链路追踪 - **Description**: springboot2.7 无中间件 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-01-09 - **Last Updated**: 2025-03-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: Java, aop, SpringBoot, Maven ## README # springboot-2.7 无侵入的请求链路追踪 ## 无侵入 工程引入该工程jar,在启动类 添加注解 `@LogMethodExecution` ,无需修改代码。 ## 方法级别追踪 ``` 输出请求-> controller方法-> xxx 的调用链 在请求头中添加Open-Debugger (debugger模式) 可增加输出内容 配置@BussinessAno方法注解修饰业务,自动被调用链抓取 websocket推送单次接口调用链明细 ``` ## 可以追踪到内部调用的成员方法 写法说明 ``` /** * author: liubw * 接口实现类 */ @Service public class MyImpl implements MyService { @Autowired private MyService myService;//通过自注入的方式 实现cglib代理,使aop能够捕获到方法内部调用 @BussinessAno(value = "看诊: ",description = "签到") @Override public String doSomething(String param) { myService.methodA(); // 代理调用 return "1"; } @BussinessAno(value = "看诊: ",description = "取药") public void methodA() { methodB(); // 内部调用不会被切片拦截 methodC(); // 内部调用不会被切片拦截 } @BussinessAno("看诊: 签到") public void methodB() { } public void methodC() { } } ``` ## 待更新 ``` 日志本地固化 调用链增加ORM追踪 懒得写配置化的部分内容, ws心跳检测等部分, 有空才会看看项目,不定期更新 ``` ## 25.1.15 ``` 增加熔断降级,超时(未处理) 增加自定义注解,通过配置文件指定降级方法,自由调整方法调用(未做动态加载,需要重启spring) ``` ## 25.3.7 ``` 增加异常追踪处理 增加异常方法熔断 增加注解启动 ``` ## 把本工程打包jar包引入其他工程使用 ``` 1.修改切点常量 com/aop/LogMethodExecutionAspect.java 中 常量pt的路径改为要应用项目的包路径 2.打包。 本地maven打包命令 或者直接用idea的clean install打进本地maven仓库 mvn install:install-file -Dfile=D:\\work\\apache-maven-3.6.2\\springboot-comp-log-1.0.jar -DgroupId=com.lbw -DartifactId=springboot-comp-log -Dversion=1.0 -Dpackaging=jar 3.工程内引入jar包 com.lbw springboot-comp-log 1.0 4.引入工程内配置启动注解 启动类添加注解 @LogMethodExecution // 开启方法调用追踪 5.非必须 如果需要抓取方法内的匿名方法,需要在引入工程配置: spring: main: allow-circular-references: true ```