生产环境出现问题排查,如果每次都需要加日志和重新发包,会严重影响问题排查的时间和效率,通过一次问题的排查,可以给大家一些思考
一.问题的复现
我们项目在调用第三方的接口的时候,在测试环境能调通,但是在预发布环境一直就调不通,报错信息如下
找到代码发现接口调用的参数都是一样的,代码也是一样的,那是什么原因引起来的呢?
二.问题排查
一开始以为是参数问题,确实加了一些日志,在预发布环境部署后,从打印的日志,可以看到请求的参数是一模一样的,所以排除feign调用的参数问题,但是同样的接口,测试环境能调通,说明这个接口是没问题的,肯定是feign调用的其他参数有问题,日志中,feign发起请求,除了有请求体,还有请求头,所以需要打印请求头的信息
三.arthas使用
如果在配置文件中,开启feign的日志打印功能,就需要改代码-->发布-->查找问题-->关闭日志-->再次发布,太繁琐了,这个时候就能引入arthas
对应arthas不太清楚的,可以参考下官网arthas.aliyun.com/doc/advance…
1.开启指定类的日志级别
logger --name 类的全路径名
修改日志级别
再次查看类的日志级别
这个时候,发现日志级别已经改为debug了
2.对比两个环境请求的不同
再次对比测试环境和预发布环境的请求参数的不同
可以看到,预发布环境的请求的 Content-Type=[application/json, application/x-www-form-urlencoded;charset=utf-8] 有两个,下面这个会覆盖上面的jons请求,从而导致请求样式错误
3.问题的排查
通过上面日志的对比,我们发现,预发布环境 Content-Type=[application/json, application/x-www-form-urlencoded;charset=utf-8],多添加了application/x-www-form-urlencoded;charset=utf-8,问题找到了,就要从代码中找找application/x-www-form-urlencoded;charset=utf-8是那里添加的
可以发现,有人写了一个配置类,作为执行某个feign的配置类,但是添加了注解
@Configuration
一旦添加这个注解,改类就会添加到spring中,会来接所有的feign,导致会添加application/x-www-form-urlencoded;charset=utf-8
4.如何解决
去除类上面@Configuration注解即可
总结
从上面可以看到arthas是很有作用的,如果不用arthas,不知道要查到猴年马月啊~~~~~