RocketMQ rocketmq_client.log日志文件配置

1、默认路径

项目添加RocketMQ以后启动项目时会在user.home下创建一个rocketmq_client.log日志文件,文件全路径是:${user.home}/logs/rocketmqlogs/rocketmq_client.log。由于我们的服务器数据盘不在home路径下,会导致系统盘空间占用不断增大,所以需要配置日志目录到其他路径。

通过源码org.apache.rocketmq.client.log.ClientLogger可以看到,在项目启动时会读取是否启动slf4j配置,读取的配置名称是:rocketmq.client.logUseSlf4j,如果是则会直接获取logger名称为RocketmqClient,Appender名称为RocketmqClientAppender的配置,以下是源码:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package org.apache.rocketmq.client.log;

import org.apache.rocketmq.logging.InternalLogger;
import org.apache.rocketmq.logging.InternalLoggerFactory;
import org.apache.rocketmq.logging.InnerLoggerFactory.InnerLogger;
import org.apache.rocketmq.logging.inner.Appender;
import org.apache.rocketmq.logging.inner.Layout;
import org.apache.rocketmq.logging.inner.Level;
import org.apache.rocketmq.logging.inner.Logger;
import org.apache.rocketmq.logging.inner.LoggingBuilder;
import org.apache.rocketmq.logging.inner.LoggingEvent;

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"));

    public ClientLogger() {
    }

    private static synchronized Appender 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();
        Appender rocketmqClientAppender = LoggingBuilder.newAppenderBuilder().withRollingFileAppender(logFileName, maxFileSize, maxFileIndex).withAsync(false, queueSize).withName("RocketmqClientAppender").withLayout(layout).build();
        Logger.getRootLogger().addAppender(rocketmqClientAppender);
        return 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();
        realLogger.addAppender(new ClientLogger.AppenderProxy());
        realLogger.setLevel(Level.toLevel(clientLogLevel));
        realLogger.setAdditivity(additive);
        return logger;
    }

    public static InternalLogger getLog() {
        return CLIENT_LOGGER;
    }

    static {
        if (!CLIENT_USE_SLF4J) {
            InternalLoggerFactory.setCurrentLoggerType("inner");
            CLIENT_LOGGER = createLogger("RocketmqClient");
            createLogger("RocketmqCommon");
            createLogger("RocketmqRemoting");
        } else {
            CLIENT_LOGGER = InternalLoggerFactory.getLogger("RocketmqClient");
        }

    }

    static class AppenderProxy extends Appender {
        private Appender proxy;

        AppenderProxy() {
        }

        protected void append(LoggingEvent event) {
            if (null == this.proxy) {
                this.proxy = ClientLogger.createClientAppender();
            }

            this.proxy.doAppend(event);
        }

        public void close() {
            if (null != this.proxy) {
                this.proxy.close();
            }

        }
    }
}

2、修改路径

package com.ybw.rocketmq.demo;

import org.apache.rocketmq.client.log.ClientLogger;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class RocketmqDemoApplication {

    public static void main(String[] args) {
        System.setProperty(ClientLogger.CLIENT_LOG_USESLF4J,"true");
        SpringApplication.run(RocketmqDemoApplication.class, args);
    }

}

添加完以上代码后,然后在配置日志的输出,logback.xml作为日志输出,具体配置如下:

<!-- ROCKETMQ START -->
	<appender name="RocketmqClientAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${LOG_HOME:-c:/}logs/mq/rocketmq_client.log</file>
		<append>true</append>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<FileNamePattern>${LOG_HOME:-c:/}logs/mq/rocketMQclient-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
			<!-- 日志文件最大尺寸 -->
			<maxFileSize>200MB</maxFileSize>
			<!--日志文件保留天数-->
			<MaxHistory>10</MaxHistory>
		</rollingPolicy>
		<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
			<maxFileSize>100MB</maxFileSize>
		</triggeringPolicy>
		<encoder>
			<pattern>%level %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%logger{0}] [%X{traceId}] [%msg]%n</pattern>
			<charset class="java.nio.charset.Charset">UTF-8</charset>
		</encoder>
	</appender>
	<logger name="RocketmqClient" additivity="false">
		<!-- 这里可以按需配置日志级别 -->
		<level value="ERROR" />
		<appender-ref ref="RocketmqClientAppender"/>
	</logger>
	<!-- ROCKETMQ END -->

根据自己的情况配置日志级别。

3、日志级别

日志一共分成5个等级,从低到高分别是:

  1. DEBUG:程序调试bug时使用。
  2. INFO:程序正常运行时使用。
  3. WARNING:程序未按预期运行时使用,但并不是错误,如:用户登录密码错误。
  4. ERROR:程序出错误时使用,如:IO操作失败。
  5. CRITICAL:特别严重的问题,导致程序不能再继续运行时使用,如:磁盘空间为空,一般很少使用。

默认的是WARNING等级,当在WARNING或WARNING之上等级的才记录日志信息。

日志等级从低到高的顺序是: DEBUG < INFO < WARNING < ERROR < CRITICAL。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值