问题的现象

最近由于技术改造,需要将一个Spring Boot服务的RocketMQ-Client的版本从4.0.0-incubating升级到4.2.0,由于RocketMQ的这个升级是保持向下兼容的,所以只需要升级依赖版本,不需要修改客户端的代码。发布到测试环境后,服务正常启动,但启动日志打到某一处之后,应用就不再有任何日志产生,也没有任何的ERROR日志,但服务的功能是正常的。再次发布依然是这个现象。第一直觉是依赖冲突问题,排掉可能的依赖冲突之后,问题依然没有解决。
切回到master重新发布,发现日志终止的地方恰好是打印comsumerproducer初始化日志的地方,于是在客户端初始化的地方打上断点,进行本地调试。

DEGUG的过程

跟到打印日志的地方,发现应用内配置的log4j2.xml已经被rocketmq-client-4.2.0.jar中的log4j2_rocketmq_client.xml替代。
rm-debug

log4j2_rocketmq_client.xml配置如下
log4j2_rocketmq_client

很显然,这样的配置我们应用自己的日志是无法打出来的。

解决方法

查看4.2.0的源码,发现有一个ClientLogger
ClientLogger
注意到rocketmq.client.log.loadconfig这个属性是RocketMQ-Client的日志配置开关,我们直接将其设置为false
在应用的启动类或者其他合适的地方加上如下代码

1
System.setProperty("rocketmq.client.log.loadconfig", "false")

至此问题解决,应用可以正常打印日志。