很多时候生产出现问题了,但是由于日志埋点太少不能迅速通过日志分析问题产生的原因,生产环境也不允许你频繁的重新发布应用。通过arthas诊断工具的组合命令能够实现不重启应用的情况下动态的插入打印日志。具体步骤如下:
- 启动arthas
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
挂载对应进程ID,进入arthas环境
- 反编译class 生成java文件到指定路径
jad --source-only com.example.demo.arthas.user.UserController > /tmp/UserController.java
- 加入打印日志代码到Java文件,然后编译为class文件
//在UserController类中增加日志
logger.info("XXXXXXXXX value={}",value)
//重新编译
mc /tmp/UserController.java -d /tmp
- 把修改的class加载到jvm 中,重新请求就可以查看打印日志了
redefine /tmp/com/example/demo/arthas/user/UserController.class
- 大功告成,后续会陆续把arthas其他常用的命令分享出来大家一起交流