SpringBoot集成RocketMQ,rocketmq_client.log日志文件配置

點擊上方「藍字」關注我們

SpringBoot項目集成rocketmq-client
<dependency>
????<groupId>org.apache.rocketmqgroupId>
????<artifactId>rocketmq-clientartifactId>
?????<version>4.7.0version>
dependency>
項目啟動時會在${user.home}/logs目錄下創(chuàng)建一個rocketmq_client.log日志文件,文件全路徑是:${user.home}/logs/rocketmqlogs/rocketmq_client.log。如果一個系統(tǒng)部署多個微服務話,會導致所有的微服務的RocketMQ的日志都會打印到該文件里,不容易定位到底是哪個微服務的RocketMQ ?Client出現(xiàn)了錯誤。所以需要配置rocketmq_client.log日志目錄到各自微服務的日志目錄加以區(qū)分。
通過源碼org.apache.rocketmq.client.log.ClientLogger可以看到,在項目啟動時會讀取是否啟動slf4j配置,讀取的配置名稱是:
rocketmq.client.logUseSlf4j如果該配置為true的話,則會直接獲取logger名稱為RocketmqClientAppender名稱為RocketmqClientAppender的配置,以下是源碼:
public?class?ClientLogger?{
????public?static?final?String?CLIENT_LOG_USESLF4J?=?"rocketmq.client.logUseSlf4j";
????public?static?final?String?CLIENT_LOG_ROOT?=?"rocketmq.client.logRoot";
????public?static?final?String?CLIENT_LOG_MAXINDEX?=?"rocketmq.client.logFileMaxIndex";
????public?static?final?String?CLIENT_LOG_FILESIZE?=?"rocketmq.client.logFileMaxSize";
????public?static?final?String?CLIENT_LOG_LEVEL?=?"rocketmq.client.logLevel";
????public?static?final?String?CLIENT_LOG_ADDITIVE?=?"rocketmq.client.log.additive";
????public?static?final?String?CLIENT_LOG_FILENAME?=?"rocketmq.client.logFileName";
????public?static?final?String?CLIENT_LOG_ASYNC_QUEUESIZE?=?"rocketmq.client.logAsyncQueueSize";
????public?static?final?String?ROCKETMQ_CLIENT_APPENDER_NAME?=?"RocketmqClientAppender";
????private?static?final?InternalLogger?CLIENT_LOGGER;
????private?static?final?boolean?CLIENT_USE_SLF4J;
????//private?static?Appender?rocketmqClientAppender?=?null;
????static?{
????????//?獲取是否啟動slf4j配置
????????CLIENT_USE_SLF4J?=?Boolean.parseBoolean(System.getProperty(CLIENT_LOG_USESLF4J,?"false"));
????????if?(!CLIENT_USE_SLF4J)?{
????????????InternalLoggerFactory.setCurrentLoggerType(InnerLoggerFactory.LOGGER_INNER);
????????????CLIENT_LOGGER?=?createLogger(LoggerName.CLIENT_LOGGER_NAME);
????????????createLogger(LoggerName.COMMON_LOGGER_NAME);
????????????createLogger(RemotingHelper.ROCKETMQ_REMOTING);
????????}?else?{
????????????//?獲取logger
????????????CLIENT_LOGGER?=?InternalLoggerFactory.getLogger(LoggerName.CLIENT_LOGGER_NAME);
????????}
????}
????//?.........
}
通過以上源碼分析可以看到如下一小段
System.getProperty(CLIENT_LOG_USESLF4J,?"false")
所有在SpringBoot項目啟動類中添加以下代碼:
public?class?Application?{
????public?static?void?main(String[]?args)?{
???????//添加配置
????????System.setProperty(ClientLogger.CLIENT_LOG_USESLF4J,"true");
????????SpringApplication.run(Application.class,?args);
????}
}
添加完以上代碼后,然后在logback-spring.xml配置文件中配置日志的輸出,具體配置如下:
????<appender?name="RocketmqClientAppender"?class="ch.qos.logback.core.rolling.RollingFileAppender">
????????<file>${LOG_DIR}/rocketmq_client.logfile>
????????<rollingPolicy?class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
????????????<fileNamePattern>${LOG_DIR}/history/rocketmq_client.%d{yyyyMMdd}.%i.logfileNamePattern>
????????????<maxFileSize>1024MmaxFileSize>
????????????
????????????<maxHistory>30maxHistory>
????????rollingPolicy>
????????<encoder?charset="UTF-8">
????????????<pattern>%d{yy-MM-dd.HH:mm:ss.SSS}?[%-16t]?%-5p?%-22c{0}?%X{ServiceId}?-?%m%npattern>
????????encoder>
????appender>
????<logger?name="RocketmqClient"?additivity="false">
????????<level?value="warn"?/>
????????<appender-ref?ref="RocketmqClientAppender"/>
????logger>
配置完畢,啟動項目可以看到日志文件已經(jīng)輸出到指定的位置了。
備注:
?System.setProperty(ClientLogger.CLIENT_LOG_USESLF4J,"true");
這段代碼配置java的系統(tǒng)屬性,也可以通過JAVA_OPTS方式設置。即在SpringBoot的啟動腳本例如Shell腳本加上:
java?-jar?-Drocketmq.client.logUseSlf4j=true??xxx-1.x.x.jar
掃碼二維碼
獲取更多精彩
Java樂園

評論
圖片
表情
