在测试本地代码问题时,控制台一直在打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); }