RocketMQ client log default configuration
Internal log initialization code
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 {
CLIENT_LOGGER = InternalLoggerFactory.getLogger(LoggerName.CLIENT_LOGGER_NAME);
}
}
private static synchronized Appender createClientAppender() {
// 日志目录:${user.home}/logs/rocketmqlogs/rocketmq_client.log
String clientLogRoot = System.getProperty(CLIENT_LOG_ROOT, System.getProperty("user.home") + "/logs/rocketmqlogs");
String clientLogMaxIndex = System.getProperty(CLIENT_LOG_MAXINDEX, "10");
String clientLogFileName = System.getProperty(CLIENT_LOG_FILENAME, "rocketmq_client.log");
String maxFileSize = System.getProperty(CLIENT_LOG_FILESIZE, "1073741824"); // 1个G
String asyncQueueSize = System.getProperty(CLIENT_LOG_ASYNC_QUEUESIZE, "1024");
String logFileName = clientLogRoot + "/" + clientLogFileName;
int maxFileIndex = Integer.parseInt(clientLogMaxIndex);
int queueSize = Integer.parseInt(asyncQueueSize);
Layout layout = LoggingBuilder.newLayoutBuilder().withDefaultLayout().build();
Appender rocketmqClientAppender = LoggingBuilder.newAppenderBuilder()
.withRollingFileAppender(logFileName, maxFileSize, maxFileIndex)
.withAsync(false, queueSize).withName(ROCKETMQ_CLIENT_APPENDER_NAME).withLayout(layout).build();
Logger.getRootLogger().addAppender(rocketmqClientAppender);
return rocketmqClientAppender;
}
The above code is in the class: org.apache.rocketmq.client.log.ClientLogger
The key configuration is as follows:
String CLIENT_LOG_USESLF4J = "rocketmq.client.logUseSlf4j";
String CLIENT_LOG_ROOT = "rocketmq.client.logRoot";
String CLIENT_LOG_FILENAME = "rocketmq.client.logFileName";
// 是否使用项目配置的slf4j记录日志,默认不使用,使用自己内部封装的日志框架记录日志
CLIENT_USE_SLF4J = Boolean.parseBoolean(System.getProperty(CLIENT_LOG_USESLF4J, "false"));
// 日志目录及日志文件:${user.home}/logs/rocketmqlogs/rocketmq_client.log
String clientLogRoot = System.getProperty(CLIENT_LOG_ROOT, System.getProperty("user.home") + "/logs/rocketmqlogs");
String clientLogFileName = System.getProperty(CLIENT_LOG_FILENAME, "rocketmq_client.log");
So we can set the values of these properties in the jvm properties to modify the default configuration of logging.
Change the client log directory
The default recording location of RocketMQ client logs: ${user.home}/logs/rocketmqlogs/rocketmq_client.log
Choose one of the following two example methods:
- Set startup parameters to specify the directory: -Drocketmq.client.logRoot=/opt/logs, specify the log directory as /opt/logs
- The main method calls the System.setProperty() method:
System.setProperty(ClientLogger.CLIENT_LOG_ROOT, "/
opt/logs");
如果需要修改日志文件名,可以针对这个属性处理:
String clientLogFileName = System.getProperty(CLIENT_LOG_FILENAME, "rocketmq_client.log");
Use the project's slf4j to achieve logging
Choose one of the following two example methods:
- Set the startup parameters to specify the directory:
-Drocketmq.client.logUseSlf4j=
true
- The main method calls the System.setProperty() method:
System.setProperty(ClientLogger.CLIENT_LOG_USESLF4J, "true");
这种方式更灵活,可以通过项目的日志配置来定义rocketmq客户端日志的格式、输出位置、滚动策略...等等。