zoukankan      html  css  js  c++  java
  • 打日志还能打出个线上Bug_ 太难了。。。

    某日中午,收到告警,有一笔订单下单失败了。赶紧去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

  • 相关阅读:
    Linux 使用Mycat实现读写分离(基于Mysql的读写分离)
    CentOS7安装GitLab、汉化、邮箱配置及使用
    ESXI6.7更换系统默认SSL证书和密钥
    nexus备份恢复
    负载均衡基本原理与lvs
    GitHub项目管理基本操作
    git 拉取远程分支到本地
    如何在Github中删除已有仓库或文件
    GitHub教程(二) 删除已有仓库
    下载 github 项目文件到本地方法
  • 原文地址:https://www.cnblogs.com/yinjihuan/p/14206221.html
Copyright © 2011-2022 走看看