【RocketMQ系列】RocketMQ屏蔽掉一直打的info日志

在测试本地代码问题时,控制台一直在打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);
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值