日志占位符_打日志还能打出个线上Bug,太难了。。。

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

954a936164d10a1a6eb0de57e74ef73c.png
异常信息

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 中会校验参数,然后触发了异常。

5a3f4aca1a3e63a44ada95407093b363.png
判断文本内容

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

总结:

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

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

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

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

30fcd8764ab1c74f14cc2299026bc84d.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值