打日志还能打出个线上Bug,太难了。。。

猿天地

共 1130字,需浏览 3分钟

 · 2020-12-27

某日中午,收到告警,有一笔订单下单失败了。赶紧去 Cat 看了下错误信息,如下:

异常信息

Web 应用调用订单服务的 RPC 接口报错了,一看错误很自主的认为这是一个序列化的问题。后面排查下来发现压根就不是,这个错误报的有点。。。

想着是不是参数中有什么特别的东西,然后发现也没有什么特别的。这个错误是某个商品下单才会出现,不是所有的商品都会出现这个问题。

然后尝试在本地复现,有这么一行关键的代码,贴了一部分,完整的作用是埋点打日志。

String.format("UnifiedOrderServiceImpl.makeOrder创建订单, make order, request: MakeOrderRequest= "+ request)

说实话我是没看懂这里用 String.format 的原因在哪里,不就是想拼接个字符串么?还搞个 format,搞就搞嘛,还没用占位符,骚操作。

真正 Bug 的原因是 request 对象中有个 String 类型的字段,字段里面的内容有%\,format 内部就报错了,大家可以用下面这段代码复现错误:

public static void main(String[] args) {
String.format("dsdsdsd"+"%\\sdsd");
}

错误信息:

Exception in thread "main" java.util.UnknownFormatConversionException: Conversion = '\'

原因是在 format 中会校验参数,然后触发了异常。

判断文本内容

虽然是很小的改动,就记录个日志而已,但也不要轻视,往往就是不够仔细,然后才会出这种问题。

总结:

  • 认真对待每一行代码
  • 做好 code review
- END -


关于作者:尹吉欢,简单的技术爱好者,《Spring Cloud 微服务-全栈技术与案例解析》, 《Spring Cloud 微服务 入门 实战与进阶》作者, 公众号猿天地发起人。

我整理了一份很全的学习资料,感兴趣的可以微信搜索「猿天地」,回复关键字 「学习资料」获取我整理好了的 Spring Cloud,Spring Cloud Alibaba,Sharding-JDBC 分库分表,任务调度框架 XXL-JOB,MongoDB,爬虫等相关资料。

后台回复 学习资料 领取学习视频


如有收获,点个在看,诚挚感谢

浏览 16
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报