Toggle navigation
架构师课程
极客时间
开源
文章
博客
SpringCloud
CloudAlibaba
SpringBoot
关于
登录
|
注册
支付宝扫一扫帮助发展吧~
微信扫一扫帮助发展吧~
更多技术分享尽在公众号 ~ 关注下吧!
打日志还能打出个线上Bug, 太难了。。。
尹吉欢
2020-12-25
0条评论
225人阅读
版权声明:转载请先联系作者并标记出处。
java
去注册
去登录
登录后发表
去注册
去登录
登录后发表
某日中午,收到告警,有一笔订单下单失败了。赶紧去Cat看了下错误信息,如下:  Web应用调用订单服务的RPC接口报错了,一看错误很自主的认为这是一个序列化的问题。后面排查下来发现压根就不是,这个错误报的有点。。。 想着是不是参数中有什么特别的东西,然后发现也没有什么特别的。这个错误是某个商品下单才会出现,不是所有的商品都会出现这个问题。 然后尝试在本地复现,有这么一行关键的代码,贴了一部分,完整的作用是埋点打日志。 ```plain String.format("UnifiedOrderServiceImpl.makeOrder创建订单, make order, request: MakeOrderRequest= "+ request) ``` 说实话我是没看懂这里用String.format的原因在哪里,不就是想拼接个字符串么?还搞个format,搞就搞嘛,还没用占位符,骚操作。 真正Bug的原因是request对象中有个String类型的字段,字段里面的内容有%\\,format内部就报错了,大家可以用下面这段代码复现错误: ```plain public static void main(String[] args) { String.format("dsdsdsd"+"%\\sdsd"); } ``` 错误信息: ```plain Exception in thread "main" java.util.UnknownFormatConversionException: Conversion = '\' ``` 原因是在format中会校验参数,然后触发了异常。  虽然是很小的改动,就记录个日志而已,但也不要轻视,往往就是不够仔细,然后才会出这种问题。 总结: * 认真对待每一行代码 * 做好code review