首页 > 其他分享 >SpringBoot集成RocketMQ,rocketmq_client.log日志文件配置

SpringBoot集成RocketMQ,rocketmq_client.log日志文件配置

时间:2023-05-30 12:06:42浏览次数:48  
标签:SpringBoot CLIENT client static RocketMQ public rocketmq LOG

SpringBoot项目集成rocketmq-client

<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-client</artifactId>
     <version>4.7.0</version>
</dependency>

项目启动时会在${user.home}/logs目录下创建一个rocketmq_client.log日志文件,文件全路径是:${user.home}/logs/rocketmqlogs/rocketmq_client.log。如果一个系统部署多个微服务话,会导致所有的微服务的RocketMQ的日志都会打印到该文件里,不容易定位到底是哪个微服务的RocketMQ  Client出现了错误。所以需要配置rocketmq_client.log日志目录到各自微服务的日志目录加以区分。

通过源码org.apache.rocketmq.client.log.ClientLogger可以看到,在项目启动时会读取是否启动slf4j配置,读取的配置名称是:

rocketmq.client.logUseSlf4j

如果该配置为true的话,则会直接获取logger名称为RocketmqClientAppender名称为RocketmqClientAppender的配置,以下是源码:

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;

    //private static Appender rocketmqClientAppender = null;

    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 {
            // 获取logger
            CLIENT_LOGGER = InternalLoggerFactory.getLogger(LoggerName.CLIENT_LOGGER_NAME);
        }
    }

    // .........
}

通过以上源码分析可以看到如下一小段

System.getProperty(CLIENT_LOG_USESLF4J, "false")

所有在SpringBoot项目启动类中添加以下代码:

public class Application {
    public static void main(String[] args) {
       //添加配置
        System.setProperty(ClientLogger.CLIENT_LOG_USESLF4J,"true");
        SpringApplication.run(Application.class, args);
    }
}

添加完以上代码后,然后在logback-spring.xml配置文件中配置日志的输出,具体配置如下:

<!-- rocketmq日志 -->
    <appender name="RocketmqClientAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_DIR}/rocketmq_client.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_DIR}/history/rocketmq_client.%d{yyyyMMdd}.%i.log</fileNamePattern>
            <maxFileSize>1024M</maxFileSize>
            <!--保留时间,单位:天-->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>%d{yy-MM-dd.HH:mm:ss.SSS} [%-16t] %-5p %-22c{0} %X{ServiceId} - %m%n</pattern>
        </encoder>
    </appender>
    <logger name="RocketmqClient" additivity="false">
        <level value="warn" />
        <appender-ref ref="RocketmqClientAppender"/>
    </logger>

配置完毕,启动项目可以看到日志文件已经输出到指定的位置了。

备注:

System.setProperty(ClientLogger.CLIENT_LOG_USESLF4J,"true");

这段代码配置java的系统属性,也可以通过JAVA_OPTS方式设置。即在SpringBoot的启动脚本例如Shell脚本加上:

java -jar -Drocketmq.client.logUseSlf4j=true  xxx-1.x.x.jar

SpringBoot集成RocketMQ,rocketmq_client.log日志文件配置_logback


Java乐园

SpringBoot集成RocketMQ,rocketmq_client.log日志文件配置_redis_02

SpringBoot集成RocketMQ,rocketmq_client.log日志文件配置_redis_03

标签:SpringBoot,CLIENT,client,static,RocketMQ,public,rocketmq,LOG
From: https://blog.51cto.com/u_13538361/6377695

相关文章

  • 非常不错的springboot启动shell脚本
    #!/bin/bashJAVA_OPTIONS_INITIAL=-Xms256MJAVA_OPTIONS_MAX=-Xmx256M_JAR_KEYWORDS=/wls/appsystem/ruoyi/apps/ruoyi-admin.jarAPP_NAME=ruoyi-adminAPPLICATION_FILE=/wls/appsystem/ruoyi/config/application.propertiesAPPLICATION_YAML_FILE=/wls/appsystem/ruoyi......
  • RocketMQ4.9.5集群部署
    RocketMQ集群部署背景:生产环境单机的MQ不具有高可用,所以我们应该部署成集群模式,这里给大家部署一个双主双从异步复制的Broker集群一、单机部署、部署前提参考https://www.cnblogs.com/hsyw/p/17428530.htmlhttps://www.cnblogs.com/hsyw/p/17429834.html二、集群部署......
  • SpringBoot i18n 配置
    概述由于项目需要进行国际化提示,所以做了一下SpringBoot的i18n的配置。有两种方式实现i18n的配置操作页面每次访问后端都携带用户设定的语言类型的i18n国际化操作。在请求URL中设置一个字段?language=zh_CN的方式实现或者请求头中设置表明语言类型都行Accept-Language:......
  • 基于JAVA的springboot+vue医院信息管理系统、医院挂号管理系统,附源码+数据库+论文+PPT
    1、项目介绍任何系统都要遵循系统设计的基本流程,本系统也不例外,同样需要经过市场调研,需求分析,概要设计,详细设计,编码,测试这些步骤,基于java语言设计并实现了医院信管系统。该系统基于B/S即所谓浏览器/服务器模式,应用java技术,选择MySQL作为后台数据库。系统主要包括首页,个人中心,用户......
  • springboot集成themeleaf报Namespace 'th' is not bound问题的解决
    问题描述在我们想要在html前端页面使用th:符号时,发现他一直报错问题解决在html标签的最上方,也就是这里:加上这样一句代码:(加在html标签里面!!!)xmlns="http://www.w3.org/1999/xhtml"xmlns:th="http://www.thymeleaf.org"这样就能够解决这个问题啦!......
  • RocketMQ 顺序消费机制
    顺序消息是指对于一个指定的Topic,消息严格按照先进先出(FIFO)的原则进行消息发布和消费,即先发布的消息先消费,后发布的消息后消费。顺序消息分为分区顺序消息和全局顺序消息。1、分区顺序消息对于指定的一个Topic,所有消息根据ShardingKey进行区块分区,同一个分区内的消息按......
  • 使用H2数据库搭建springboot应用
    h2数据库有2中模型,一种是嵌入式,一种是服务端。嵌入式时,我们多个配置同一个地址就可以访问同一个数据集,服务端需要额外开启服务,再通过ip端口访问。这里我们介绍下怎么在springboot项目下开启服务端模式。1、在springboot应准备就绪后启动h2服务publicclassH2Serverimplements......
  • SpringBoot 项目 返回时间 日期、格式不正确 解决办法
    https://blog.csdn.net/rain67/article/details/127200263 SpringBoot项目返回时间格式不正确解决办法1、遇到问题2、解决方法(1)问题所在(2)如何解决(3)效果SpringBoot项目返回时间格式不正确解决办法  今天做一个SpringBoot+Vue的一个练习项目,想要搞一个创建该账号的时间,......
  • SpringBoot自动配置原理
    在SpringBoot项目中的引导类上有一个注解@SpringBootApplication,这个注解是对三个注解进行了封装,分别是:@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan其中@EnableAutoConfiguration是实现自动化配置的核心注解。该注解通过@Import注解导入对应的配......
  • SpringBoot如何整合定时任务调度
    所有的系统开发里面定时调度绝对是一个核心的话题,对于定时调用的实现在实际开发之中可以使用:TimerTask,Quartz,SpringTask配置,实际上这里面最简单的配置就是Spring自己所提供的Task处理。如果要想实现定时调度,只需要配置一个定时调度的组件类即可:1.packagecom.gwolf.task;2.3.......