标签:Dubbo springboot tt Arthas alibaba io arthas logger
Client端:
Server端:
Arthas快速开始
启动后,会列出所有的java进程,选择1,然后回车,就会连接上ServerDemoApplication
Dubbo线上服务抛出异常,怎么获取调用参数?
当线上服务抛出异常时,最着急的是什么参数导致了抛异常?
在demo里,
访问http://localhost:8080/user/0,UserServiceImpl就会抛出一个异常,因为user id不合法。
在Arthas里执行 watch com.example.UserService * -e -x 2 ‘{params,throwExp}’ ,然后再次访问,就可以看到watch命令把参数和异常都打印出来了。
![](https://upload-images.jianshu.io/upload_images/134
《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
65705-f9df0b6ec14f67d4.image?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
怎样线上调试Dubbo服务代码?
在本地开发时,可能会用到热部署工具,直接改代码,不需要重启应用。但是在线上环境,有没有办法直接动态调试代码?比如增加日志。
在Arthas里,可以通过redefine命令来达到线上不重启,动态更新代码的效果。
比如我们修改下UserServiceImpl,用System.out打印出具体的User对象来:
本地编绎后,把
server-demo/target/classes/com/example/UserServiceImpl.class
传到线上服务器,然后用redefine命令来更新代码:
这样子更新成功之后,访问 http://localhost:8080/user/1,在ServerDemoApplication的控制台里就可以看到打印出了user信息。
怎样动态修改Dubbo的logger级别?
在排查问题时,需要查看到更多的信息,如果可以把logger级别修改为DEBUG,就非常有帮助。
ognl是apache开源的一个轻量级表达式引擎。下面通过Arthas里的ognl命令来动态修改logger级别。
首先获取Dubbo里TraceFilter的一个logger对象,看下它的实现类,可以发现是log4j。
再用sc命令来查看具体从哪个jar包里加载的:
可以看到log4j是通过slf4j代理的。
那么通过org.slf4j.LoggerFactory获取root logger,再修改它的level:
可以看到修改之后,root logger的level变为DEBUG。
怎样减少测试小姐姐重复发请求的麻烦?
在平时开发时,可能需要测试小姐姐发请求过来联调,但是我们在debug时,可能不小心直接跳过去了。这样子就尴尬了,需要测试小姐姐再发请求过来。
Arthas里提供了tt命令,可以减少这种麻烦,可以直接重放请求。
上面的tt -t命令捕获到了3个请求。然后通过tt --play可以重放请求:
烦,可以直接重放请求。
[外链图片转存中…(img-TpaQhPtN-1640684902563)]
上面的tt -t命令捕获到了3个请求。然后通过tt --play可以重放请求:
标签:Dubbo,springboot,tt,Arthas,alibaba,io,arthas,logger 来源: https://blog.csdn.net/m0_65485166/article/details/122199049
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。