好难!打个日志还能打出一个bug,语塞...
某日中午,收到告警,有一筆訂單下單失敗了。趕緊去Cat看了下錯(cuò)誤信息,如下:
Web應(yīng)用調(diào)用訂單服務(wù)的RPC接口報(bào)錯(cuò)了,一看錯(cuò)誤很自主的認(rèn)為這是一個(gè)序列化的問題。后面排查下來發(fā)現(xiàn)壓根就不是,這個(gè)錯(cuò)誤報(bào)的有點(diǎn)。。。
想著是不是參數(shù)中有什么特別的東西,然后發(fā)現(xiàn)也沒有什么特別的。這個(gè)錯(cuò)誤是某個(gè)商品下單才會(huì)出現(xiàn),不是所有的商品都會(huì)出現(xiàn)這個(gè)問題。
然后嘗試在本地復(fù)現(xiàn),有這么一行關(guān)鍵的代碼,貼了一部分,完整的作用是埋點(diǎn)打日志。
String.format("UnifiedOrderServiceImpl.makeOrder創(chuàng)建訂單, make order, request: MakeOrderRequest= "+ request)說實(shí)話我是沒看懂這里用String.format的原因在哪里,不就是想拼接個(gè)字符串么?還搞個(gè)format,搞就搞嘛,還沒用占位符,騷操作。
真正Bug的原因是request對(duì)象中有個(gè)String類型的字段,字段里面的內(nèi)容有%\,format內(nèi)部就報(bào)錯(cuò)了,大家可以用下面這段代碼復(fù)現(xiàn)錯(cuò)誤:
public static void main(String[] args) {String.format("dsdsdsd"+"%\\sdsd"); }錯(cuò)誤信息:
Exception in thread "main" java.util.UnknownFormatConversionException: Conversion = '\'原因是在format中會(huì)校驗(yàn)參數(shù),然后觸發(fā)了異常。
好難!打個(gè)日志還能打出一個(gè)bug,語塞…
雖然是很小的改動(dòng),就記錄個(gè)日志而已,但也不要輕視,往往就是不夠仔細(xì),然后才會(huì)出這種問題。
總結(jié):
- 認(rèn)真對(duì)待每一行代碼
- 做好code review
總結(jié)
以上是生活随笔為你收集整理的好难!打个日志还能打出一个bug,语塞...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: @产品部 -- 腾讯策划部是如何培养用户
- 下一篇: 程序员必收藏的五个网站