- 背景介绍: 项目选用RocketMq作为消息机制的实现,集成springboot,顺利运行2年多了,平常没去关注日志这块,最近发现磁盘可用空间告警了,检查发现Mq的客户端日志占用了大量空间,有19G左右。
-
解决目标: 实现日志大小可控,其次减少info无意义内容,最后能够根据项目进行路径划分,不使用统一路径,方便出现问题排查(现有日志log4j2已经实现按照项目路径划分日志,所以集成到log4j2即可)。
-
RoeketMq 4.9.3,源码路径:org.apache.rocketmq.client.log.ClientLogger,在不改源码的基础上发现无法关闭日志
\
在log4j2的配置文件中增加如下配置:
<logger name="RocketmqClient" level="ERROR" additivity="false">
<appender-ref ref="rockerMqRollingFile"/>
</logger>
<!-- mq的日志归档 -->
<RollingFile immediateFlush="false" name="rockerMqRollingFile" fileName="${LOG_NAME}/rocketMq.log"
filePattern="${LOG_PATH}/${LOG_NAME}/${APPLICATION_NAME}/%d{yyyy-MM-dd}/rocketMq_%d{yyyy-MM-dd}_%i.log.gz">
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}] %-5level %L %M - %msg%xEx%n"/>
<Policies>
<SizeBasedTriggeringPolicy size="10MB"/>
<TimeBasedTriggeringPolicy interval="1"/>
</Policies>
</RollingFile>
public static void main(String[] args) {
System.setProperty(ClientLogger.CLIENT_LOG_USESLF4J, "true");
SpringApplication.run(BytDesignApplication.class, args);
}
经过测试可以发现${user.home}/logs/rocketmqlogs/rocketmq_client.log 不会生成了
通常情况下会写在启动命令,通过jvm参数来设置,可以加如下参数: -Drocketmq.client.logUseSlf4j=true