在测试本地代码问题时,控制台一直在打mq的连接日志,导致在真正测试时查看日志很不方便。
那么,就需要屏蔽掉这些没有意义的日志。其实就是修改mq的打印日志级别为error级别。
如何处理呢?
就是要重写包org.apache.rocketmq.client.log的内容。
使用注意点
- 重写的包要在/src/main/java下,与你所在的工程包是平级;
- 包名必须是org.apache.rocketmq.client.log,否则不生效。原因在于是重写mq底层的代码,那么包名就要保持一致;
- 修改的地方有两处:
- 新增ClientLogger这个类;
- 在工程包启动类中要新增一段修改日志级别的main方法;
新增的ClientLogger类
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 = Boolean.parseBoolean(System.getProperty("rocketmq.client.logUseSlf4j", "false"));
private static Appender rocketmqClientAppender = null;
public ClientLogger() {
}
private static synchronized void createClientAppender() {
String clientLogRoot = System.getProperty("rocketmq.client.logRoot", System.getProperty("user.home") + "/logs/rocketmqlogs");
String clientLogMaxIndex = System.getProperty("rocketmq.client.logFileMaxIndex", "10");
String clientLogFileName = System.getProperty("rocketmq.client.logFileName", "rocketmq_client.log");
String maxFileSize = System.getProperty("rocketmq.client.logFileMaxSize", "1073741824");
String asyncQueueSize = System.getProperty("rocketmq.client.logAsyncQueueSize", "1024");
String logFileName = clientLogRoot + "/" + clientLogFileName;
int maxFileIndex = Integer.parseInt(clientLogMaxIndex);
int queueSize = Integer.parseInt(asyncQueueSize);
Layout layout = LoggingBuilder.newLayoutBuilder().withDefaultLayout().build();
rocketmqClientAppender = LoggingBuilder.newAppenderBuilder().withRollingFileAppender(logFileName, maxFileSize, maxFileIndex).withAsync(false, queueSize).withName("RocketmqClientAppender").withLayout(layout).build();
Logger.getRootLogger().addAppender(rocketmqClientAppender);
}
private static InternalLogger createLogger(String loggerName) {
String clientLogLevel = System.getProperty("rocketmq.client.logLevel", "INFO");
boolean additive = "true".equalsIgnoreCase(System.getProperty("rocketmq.client.log.additive"));
InternalLogger logger = InternalLoggerFactory.getLogger(loggerName);
InnerLogger innerLogger = (InnerLogger) logger;
Logger realLogger = innerLogger.getLogger();
if (rocketmqClientAppender == null) {
createClientAppender();
}
realLogger.addAppender(rocketmqClientAppender);
realLogger.setLevel(Level.toLevel(clientLogLevel));
realLogger.setAdditivity(additive);
return logger;
}
public static InternalLogger getLog() {
return CLIENT_LOGGER;
}
static {
InternalLoggerFactory.setCurrentLoggerType("inner");
CLIENT_LOGGER = createLogger("RocketmqClient");
createLogger("RocketmqCommon");
createLogger("RocketmqRemoting");
}
}
启动类main方法调整mq日志级别
如这样的调整:
public static void main(String[] args) {
System.setProperty("rocketmq.client.logLevel", "ERROR");
SpringApplication.run(StationApplication.class, args);
}