刚发现的虫子原来很早之前就有了
一、问题描述
上周末,某商家上线后,导致两个问题:1)集群的启动日志没有该商家的任何启动信息;2)其他商家开始出现错误ProducerTemplate has not been started
。
二、尝试路径
- 初步怀疑是引入新的jar包导致的问题,通过J-one的包对比工具发现并没有引入新的jar包。
- 下载线上包在本地运行,日志太多淹没了有用的错误信息。
- 删除其他商家的代码,只保留本地上线出错的商家,之后再在本地运行,发现了异常信息
Caused by: java.lang.NoSuchMethodError: org.apache.commons.io.IOUtils.toString(Ljava/io/InputStream;Ljava/com.ibm.developerworks.nio/charset/Charset;)Ljava/lang/String;
。 - 根据这个异常信息很容易定位出来,原因是jar包不兼容。更新commons-io版本,由1.3.2到2.5后解决问题
三、原因
- 当前运行的EDI版本增加了新的dt-processor模块,该模块依赖2.5版本的commons-io。但是运行时一直依赖的是1.3.2版本的commons-io包,由于该商家用到了新的dt-processor模块,导致触发了这段不兼容代码。
四、反思
- 现在出现的bug有可能是之前就有的,只不过现在因为某些条件才触发而已。
- 日志信息太多会让人对异常麻木,尽量减少无关的异常信息展示。例如移除其他商家,只保留当前商家,可大大提高定位异常的准确度。