RocketMQ rocketmq_client.log日志文件配置

2023-11-02

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。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RocketMQ rocketmq_client.log日志文件配置 的相关文章

  • rockemq创建topic

    sh mqadmin updateTopic n sms pro 007 9876 sms pro 008 9876 c DefaultCluster t smsFrontSmsMq 10 w 4 r 4
  • 消息队列的两种模式

    Java消息服务 Java Message Service JMS 应用程序接口是一个Java平台中关于面向消息中间件 MOM 的API 用于在两个应用程序之间 或分布式系统中发送消息 进行异步通信 点对点与发布订阅最初是由JMS定义的 这
  • RocketMQ部署之动态设置JVM启动参数

    这里是weihubeats 觉得文章不错可以关注公众号小奏技术 文章首发 拒绝营销号 拒绝标题党 背景 线上的RocketMQ集群有运行一段时间了 比如测试环境和线上环境的RocketMQ集群部署的机器内存大小肯定不一样 所以可能要写多个部
  • centos安装rocketmq

    centos安装rocketmq 1 下载rocketmq二进制包 2 解压二进制包 3 修改broker conf 4 修改runbroker sh和runserver sh的JVM参数 5 启动NameServer和Broker 6 安
  • centos安装rocketmq

    1 下载 https github com apache rocketmq releases 2 环境 jdk1 8 0 211 maven3 6 3 3 安装 gt tar xf rocketmq all 4 7 1 tar gz gt
  • kafka 应用实战

    一 Java 中使用 kafka 进行通信 依赖
  • RocketMQ 简介

    本文根据阿里云 RocketMQ产品文档整理 地址 https help aliyun com document detail 29532 html userCode qtldtin2 简介 RocketMQ是由阿里捐赠给Apache的一款
  • RocketMQ经典高频面试题大全(附答案)

    编程界的小学生 0 彩蛋 1 说说你们公司线上生产环境用的是什么消息中间件 2 多个mq如何选型 3 为什么要使用MQ 4 RocketMQ由哪些角色组成 每个角色作用和特点是什么 5 RocketMQ中的Topic和JMS的queue有什
  • spring整合RocketMQ

    1 看官方javademo https www apache org dyn closer cgi path rocketmq 4 2 0 rocketmq all 4 2 0 source release zip 下载下来 spring
  • 《消息队列高手课》缓存策略:如何使用缓存来减少磁盘IO?

    现代的消息队列 都使用磁盘文件来存储消息 因为磁盘是一个持久化的存储 即使服务器掉电也不会丢失数据 绝大多数用于生产系统的服务器 都会使用多块儿磁盘组成磁盘阵列 这样不仅服务器掉电不会丢失数据 即使其中的一块儿磁盘发生故障 也可以把数据从其
  • rocketMq介绍和安装

    rocketMq介绍和安装 Mq介绍 MQ MessageQueue 消息队列 队列 是一种FIFO 先进先出的数据结构 消息由生产者发送到MQ进行排队 然后按原来的顺序交由消息的消费者进行处理 QQ和微信就是典型的MQ MQ的作用 主要有
  • springboot-rocketmq日志rocketmq_client.log问题

    问题描述 springboot配置rocketmq后 会写入日志到rocketmqlogs目录下的rocketmq client log文件中 且日志过于庞大 解决 1 启动类增加代码 System setProperty ClientLo
  • RocketMQ消费者可以手动消费但无法主动消费问题,或生成者发送超时

    1 大多数是配置问题 修改rocketmq文件夹broker conf 2 配置与集群IP或本地IPV4一样 重启 在RocketMQ独享实例中支持IPv4和IPv6双栈 主要是通过在网络层面上同时支持IPv4和IPv6协议栈来实现的 Ro
  • 腾讯技术工程总结-主流消息队列你了解哪些?

    文章参考 腾讯技术工程 关于消息队列的知识总结 主流消息队列你了解哪些 消息队列的发展历程 2003 年至今有很多优秀的消息队列诞生 如 kafka 阿里自研的 rocketmq 以及后起之秀 pulsar 消息队列在刚出现所需要解决的问题
  • JMS MQ绑定问题

    我在使用 MDB 与 MQ 队列绑定 JMS 时遇到了这个奇怪的问题 消息驱动的 EJB CrbEventMessageAsynchronousService无法连接到 JMS 目标 queue contratto crb input pu
  • 队列管理器和消息代理之间的区别

    Websphere Message Broker 和队列管理器之间有什么区别 我猜队列管理器将消息放入队列 从队列中取出消息 将消息移动到回退队列等 那么代理的工作是什么 它位于发布者和队列管理器之间还是消费者和队列管理器之间 Websph
  • Kafka速度之谜:高性能的幕后秘密大揭秘

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 kafka高性能的原因 Page Cache ZeroCopy 零拷贝 前言 Kafka的介绍 kafka是linkedIn开源的分布式消息系统 归给Ap
  • 在 RabbitMQ 主题交换中路由与模式不匹配的消息

    两个队列绑定到具有以下路由键的主题交换 队列 A 与路由键模式匹配绑定 foo队列 B 与路由键模式匹配绑定 bar 我想向此交换添加第三个队列 该队列接收的消息都不是foo消息也不bar消息 如果我用一个绑定这个队列 路由密钥 我自然会得
  • Java:在后台更新有大量行的 JTable

    我正在编写一个简单的 Java Swing 实用程序 它将从 MQ JMS 服务器读取消息并将它们显示在 JTable 中 private void getMessages try if null Queue Queue close Clo
  • 通过 .net 客户端通过 SSL 连接到 IBM MQ

    我正在尝试通过 NET 客户端连接到 MQ 服务器队列 我需要使用证书进行安全通信 这是我的代码 MQEnvironment SSLKeyRepository SYSTEM MQEnvironment ConnectionName conn

随机推荐

  • 网络工程师工作经验分享

    网络 点击打开链接1 点击打开链接2 点击打开链接3 点击打开链接
  • Docker容器-cgroups资源配置

    目录 Cgroup的概述 使用stress工具测试CPU和内存 CPU周期限制 CPU Core控制 对内存限额 对 Block IO的限制 bps 和iops 的限制 Cgroups如何工作的 cgroup对cpu限制小结 cgroup对
  • 【其他】MacOS Homebrew安装与卸载

    打开terminal 输入 usr bin ruby e curl fsSL https raw githubusercontent com Homebrew install master install 输入sudo密码之后等待一会 之后
  • 电子拼图思维逻辑机的破解思路

    最近孩子去朋友家做客 喜欢上了一个玩具 网上找了好久都没找到 后来问朋友给了个链接 发现是上市不久的益智类游戏玩具 先上个图 开机之后有500关 难度越来越大 在朋友家玩的第3关 小孩子们都拼不上 然后我们家长大孩子们也一起参与 搞了几分钟
  • 前端使用FormData实现上传文件

    场景 用户通过点击图片弹出上传文件的框框 然后选择将要替换的图片 选择后实时预览 点击确定后通过ajax上传到服务器 前端html div div
  • 面试官都在问

    面试官都在问 Linux命令之gdb 0 简述 GDB GNU symbolic debugger 简单地说就是一个调试工具 它是一个受通用公共许可证即GPL保护的自由软件 一般来说 GDB主要帮助你完成下面四个方面的功能 1 启动你的程序
  • Python数据可视化

    Python数据可视化 Python地理区域发展分布热力图 目录 Python数据可视化 Python地理区域发展分布热力图 基本介绍 环境准备 程序设计 参考资料 基本介绍 Python数据可视化 Python地理区域发展分布热力图 环境
  • qtxml生成与解析

    目录 xml生成 xml解析 xml生成 void Qxml setTml QDomDocument doc xml文档树的创建 xml文档树的指令版本必有的 QDomProcessingInstruction pi doc createP
  • LINUX安装nginx详细步骤,部署web前端项目

    1 安装依赖包 一键安装上面四个依赖 yum y install gcc zlib zlib devel pcre devel openssl openssl devel 2 下载并解压安装包 可以去https nginx org down
  • 华为OD机试真题- 跳房子I-2023年OD统一考试(B卷)

    题目描述 跳房子 也叫跳飞机 是一种世界性的儿童游戏 游戏参与者需要分多个回合按顺序跳到第1格直到房子的最后一格 跳房子的过程中 可以向前跳 也可以向后跳 假设房子的总格数是count 小红每回合可能连续跳的步数都放在数组steps中 请问
  • java 多线程提高大数据量的读写效率

    对于多线程来说 刚开始是比较蒙的 不了解其中的运行机制 最近项目中需要用多线程解决一个加载缓慢的问题 特此写了一个例子 供大家参考 如有建议 请多指教 哈哈哈 那么 话不多说 先说下需求 此接口供xxx公司调用 实现对数据库的读取和修改 而
  • 官宣了!Apache ECharts 毕业成为 Apache 软件基金会顶级项目!

    2021 年 1 月 26 日 德克萨斯州威明顿市 Apache 软件基金会 ASF 是 350 多个开源项目和计划的全志愿开发者 管理者和孵化者 今天宣布 Apache ECharts 成为顶级项目 TLP Apache ECharts
  • Python爬虫的urlib的学习(学习于b站尚硅谷)

    目录 一 页面结构的介绍 1 学习目标 2 为什么要了解页面 html 3 html中的标签 仅介绍了含表格 无序列表 有序列表 超链接 4 本节的演示 二 Urllib 1 什么是互联网爬虫 2 爬虫核心 3 爬虫的用途 4 爬虫的分类
  • IDEA如何导出导入配置文件

    导出配置 打开工具 找到 file gt export setting 选择路径即可 导出的是setting jar文件 导入配置 file gt import setttings gt 选则jar文件 gt 一路确认 gt 重启
  • 多线程常见面试题

    常见的锁策略 这里讨论的锁策略 不仅仅局限于 Java 乐观锁 vs 悲观锁 锁冲突 两个线程尝试获取一把锁 一个线程能获取成功 另一个线程阻塞等待 乐观锁 预该场景中 不太会出现锁冲突的情况 后续做的工作会更少 悲观锁 预测该场景 非常容
  • 优雅的代码命名规范,代码如诗

    优雅的代码命名规范 管理类命名 传播类命名 回调类命名 监控类命名 内存管理类命名 过滤检测类命名 结构类命名 常见设计模式命名 解析类命名 网络类命名 CRUD命名 其他 END 日常编码中 代码的命名是个大的学问 能快速的看懂开源软件的
  • canvas详解05-变形

    几何变换 canvas现在被大量地运用于游戏等动画领域 最主要的归功于它提供的一系列几何变换方法 使得动画更加地容易 所以其几何变换是非常重要的一节 在本教程前面的部分中 我们已经了解了 Canvas 网格和坐标空间 到目前为止 我们只是根
  • 解决:The Apache Tomcat Native library which allows optimal performance in production environments was

    在启动Tomcat 6 0时发现第一条信息便是 The Apache Tomcat Native library which allows optimal performance in production environments was
  • 用C++编写一个猜数字游戏

    系统随机生成一个1到100之间的数字 玩家进行猜测 如果猜错 提示玩家数字过大或过小 如果猜对恭喜玩家胜利 并且推出游戏 include
  • RocketMQ rocketmq_client.log日志文件配置

    1 默认路径 项目添加RocketMQ以后启动项目时会在user home下创建一个rocketmq client log日志文件 文件全路径是 user home logs rocketmqlogs rocketmq client log