Java 日志

news/2024/4/25 14:38:00/文章来源:https://blog.csdn.net/weixin_46766584/article/details/129271934

目录

    • 日志门面与实现框架
      • 日志门面
      • 日志实现框架
      • 总结
    • SLF4j + Logback 的实现
      • 第一步:添加配置文件
        • logback.xml
      • LogTool.java 工具类(非必要)
      • 依赖导入
        • Java 程序
        • SpringBoot 项目
      • 测试
    • 其他的日志门面与实现框架

  • 日志门面:提供统一的日志输出接口

  • 日志实现:具体实现日志输出的代码

日志门面与实现框架

  • 使用 日志门面+日志实现框架 的方式,是为了:低耦合,日志的实现与业务代码通过 日志门面连接,在后续修改日志实现时,无需更改业务代码。

  • 这是 门面设计模式(外观设计模式)的典型应用。

日志门面

  • SLF4j(Simple Logging Facade For Java):一个为 Java 程序提供的统一日志输出接口,就是一个接口,

  • JCL(Jaka Commons Logging, Apache Commons Logging):Apache 提供的一个日志门面,提供统一的对外接口。

日志实现框架

  • JUL(Java util Logging)Java 原生的日志框架,使用时不需要引用第三方类库,使用方便

    • 7 个日志级别(从高到低):SEVERE、WARNING、INFO、CONFIG、FINE、FINER、FINEST

    • 同时还有 OFF、ALL 两个特别的日志级别,用来 关闭/打开 所有的日志

  • log4jApache 的一个开源项目

    • 7 个日志级别(从高到低):OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL
    日志级别日志介绍
    OFF最高日志级别,关闭所有日志
    FATAL将会导致引用程序退出的错误
    ERROR发生错误事件,但仍不影响系统的继续运行
    WARN警告,存在潜在的错误
    INFO一般用在粗粒度级别上,强调应用程序的运行全程
    DEBUG一般用在细粒度级别上,用于调试应用程序
    ALL最低日志级别,打开所有日志
  • log4j2log4j 的升级版,参考了 logback 的设计,同时进行了问题修复

    • 异常优化:提供了一些异常处理机制,来解决在 logback 中,应用无法感知到 Appener 异常。

    • 性能提升:相较于 log4j 和 logback,性能都有明显的提升。

    • 自动重载配置:参考 logback 的参数修改自动更新机制,提供自动刷新参数的设置。

    • 无垃圾机制:可以使用其设计的一套无垃圾机制(对象重用、内存缓冲),避免频繁的日志记录导致 JVM gc 压力过大。

  • logbackSpringBoot 默认的日志框架

    • 由三个模块组成:

      • logback-core:logback 核心包,开发人员可以以次为基础搭建自身模块。

      • logback-classic:logback 对于 SLF4j 的实现,其中依赖了 logback-core 包

      • logback-access:集成 Servlet 容器,实现 HTTP 访问日志的功能。

    • 可以输出日志到文件、数据库、控制台中,还可以将日志文件进行压缩,功能很丰富

    • 日志级别(从高到低):FATAL、ERROR、WARNING、INFO、DEBUG、TRACE

    日志级别日志介绍
    TRACE在线调试,默认不输出到控制台和文件
    DEBUG在线调试、终端查看,默认输出到控制台,用于开发者查看日志流水
    INFO报告程序进度、查看程序状态,用于跟踪程序进展
    WARNING警告,程序出现错误,但是程序可以恢复,程序仍是正常状态
    ERROR错误,程序发生错误后还可以运行,但是程序极有可能处于非正常状态,功能可能无法全部完成
    FATAL致命错误,程序必须马上终止

总结

  • 日志门面和实现框架的面世时间(从早到晚):Log4j -> JUL -> JCL -> SLF4j -> Logback -> Log4j2

  • JCL 门面优先寻找 Log4j 实现,退而求次则是 JUL 实现,最后才会使用内部提供的 SimpleLog 实现

  • 而,SLF4j 门面是作为一个纯粹的日志门面,提供了 SLF4j 桥接器将 SLF4j 桥接到 log4j、JUL 实现去做日志输出

  • 后续 log4j 无法满足高性能要求后,SLF4j 制作者根据 SLF4j 接口写出了 logback 日志实现框架。

  • log4j2 是 Apache 全面借鉴 SLF4j + Logback 后推出的,添加了很多新的特性,还做了分离式设计。

  • 推荐使用 SLF4j + logback 的方式去做 Java 的日志输出

    • 优点一:logback 中实现 SLF4j 门面,在 Java 程序中直接引入 logback-classic 的依赖即可

    • 优点二:SpringBoot 使用 logback 作为默认的日志实现,在 SpringBoot 项目中可以直接使用。

SLF4j + Logback 的实现

第一步:添加配置文件

  • Logback 框架可以自动识别 */classes/ 下的 logback.xml 文件。

    • 在 SpringBoot 框架下,Logback 框架还可以自动识别 */classes/ 下的 logback-spring.xml 文件。
  • 同样,Log4j/Log4j2 框架可以自动识别 */classes/ 下的 log4j.xml/log4j2.xml 文件。

    • 在 SpringBoot 框架下,Log4j2 框架还可以自动识别 */classes/ 下的 log4j2-spring.xml 文件。
  • JUL 框架可以自动识别 */classes/ 下的 logging.properties 文件。

  • 将配置文件放在 src/main/resources 下,项目构建时,文件就会加载到 */classes/ 下了。

logback.xml

<?xml version="1.0" encoding="UTF-8" ?>
<configuration scan="true" scanPeriod="10000"><!-- scan 属性:当此属性设置为 true 时,配置文件如果发生改变,将会被重新加载,默认值为 true --><!--scanPeriod属性:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当 scan 为 true 时,此属性生效。默认的时间间隔为 1 分钟。--><!-- debug 属性:当此属性设置为 true 时,将打印出 logback 内部日志信息,实时查看 logback 运行状态。默认值为 false。 --><!--日志格式设置标识符:%n:换行符;%level:日志级别;%-5level:日志级别(使用5个字符,并靠左对齐);%msg、%m:日志消息(简写是:%m);%logger、%M:日志输出者(就是哪个类做这个日志输出,这个应用是 Log 类);%c:日志输出者输出日志时使用的方法;%L:日志输出者输出日志时使用的方法中具体的行数;%d{yyyy-MM-dd HH:mm:ss}:时间,大括号内的是时间格式,默认格式是 2023-02-27 15:15:01,877;%thread:输出日志的进程名字;--><!-- 日志 输出格式 1 --><property name="layout1" value="[%level] -- %m -- [%d{yyyy-MM-dd HH:mm:ss}] %c %M %L [%thread] %n"/><!-- 日志 输出格式 2 --><property name="layout2"value="[%-5level] - %d{yyyy-MM-dd HH:mm:ss} - %c:%M:%L %n[%-5level] - [%thread] - %msg %n%n"/><!-- 输出格式 3(输出到 *.html 文件,不需要间隔) --><property name="layout3"value="%level%d{yyyy-MM-dd HH:mm:ss}%c%M%L%thread%msg"/><!-- 文件输出时,文件的路径 --><property name="filePath" value="D:/file/projects/files/Java/journal/logback/"/><!-- 输出颜色: 红 --><property name="red" value="System.err"/><!-- 输出颜色: 黑 --><property name="black" value="System.out"/><!--  每天的日期 String 串,用来生成文件夹  --><timestamp key="datetime" datePattern="yyyy-MM-dd"/><!--配置 输出控制器:consoleAppender,控制台输出--><appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"><!-- 颜色 --><target>${red}</target><!-- 输出格式 --><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${layout1}</pattern></encoder></appender><!--配置 输出控制器:consoleAppender1,控制台输出--><appender name="consoleAppender1" class="ch.qos.logback.core.ConsoleAppender"><!-- 颜色 --><target>${red}</target><!-- 输出格式 --><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${layout2}</pattern><!-- 设置字符集 --><charset>UTF-8</charset></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter">--><level>DEBUG</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!--配置 输出控制器:consoleFilterAppender,控制台输出在 consoleAppender 的基础上 添加 过滤器--><appender name="consoleFilterAppender" class="ch.qos.logback.core.ConsoleAppender"><!-- 颜色 --><target><!-- ${red} -->${black}</target><!-- 输出格式 --><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${layout2}</pattern></encoder><!-- 配置过滤器 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 设置 级别 --><level>DEBUG</level><!--功能是:仅记录 设定好的级别的日志,可以用来设置 不同的日志输出到不同的 日志文件中;当然,将配置值进行 对调后,就可以反向屏蔽(屏蔽指定级别的日志)--><!-- 设置 级别 与 设置的级别 匹配时 就 打印 --><onMatch>ACCEPT</onMatch><!-- 设置 级别 与 设置的级别 不匹配时 就 屏蔽 --><onMismatch>DENY</onMismatch></filter></appender><!--配置 输出控制器:htmlFileAppender,输出到 .html 文件--><appender name="htmlFileAppender" class="ch.qos.logback.core.FileAppender"><!-- 文件位置 --><file>${filePath}/${datetime}/logback-html.html</file><!-- 输出格式 --><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="ch.qos.logback.classic.html.HTMLLayout"><pattern>${layout3}</pattern></layout></encoder></appender><!--配置 输出控制器:fileAppender,输出到 .log 文件--><appender name="fileAppender" class="ch.qos.logback.core.FileAppender"><!-- 文件位置 --><file>${filePath}/${datetime}/logback-file.log</file><!-- 输出格式 --><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${layout2}</pattern></encoder></appender><!--配置 输出控制器:rollingFileAppender,输出到 .log 文件,可以 拆分 和 压缩--><appender name="rollingFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"><!--文件位置${filePath}:是文件存放目录路径,即:D:/file/projects/files/Java/journal/logback/${datetime}:是在文件存放目录路径下的文件夹名称,即:yyyy-MM-ddlogback-rollingFile.log:文件名(包括后缀)--><file>${filePath}/${datetime}/logback-rollingFile.log</file><!-- 输出格式 --><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${layout2}</pattern><!-- 设置字符集 --><charset>UTF-8</charset></encoder><!-- 指定拆分规则 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 默认格式:gz,--><!-- 声明文件名:按照 时间和格式 来 --><fileNamePattern><!-- %d{yyyy-MM-dd}是时间,%i 是防止同一天的文件重名(而 压缩包 有 *.gz、*.zip 等等) -->${filePath}/${datetime}/logback-rollingFile%i.%d{yyyy-MM-dd}.log.gz</fileNamePattern><!-- 单个文件最大的的大小:按照 文件大小 来拆分文件 --><maxFileSize>10MB</maxFileSize><!-- 文件数目(单位:个):大于 文件数目后 将会覆盖更早的日志压缩文件(不建议添加) --><!--            <minIndex>1</minIndex>--><!--            <maxIndex>3</maxIndex>--><!-- 文件保存最长时间(单位:天):过早的日志压缩文件将会删除 --><maxHistory>30</maxHistory></rollingPolicy></appender><!-- 配置异步 appender--><appender name="asyncAppender" class="ch.qos.logback.classic.AsyncAppender"><!-- 导入实际的 Appender --><appender-ref ref="consoleAppender"/><!--注意:这两个属性不能乱配置1、<discardingThreshold></discardingThreshold>阈值,当队列剩余容量小于阈值时,trace debug info 这三个级别的日志将被抛弃,默认值是:-12、<queueSize></queueSize>队列的深度默认值是:256--></appender><!--配置 日志记录器:root Logger--><root level="ALL"><!-- 引入 Appender --><appender-ref ref="asyncAppender"/><appender-ref ref="fileAppender"/></root><!-- 自定义 Logger --><logger name="com.domain.LogTool" level="trace" additivity="false"><!--additivity="false"  表示 不继承 rootLogger--><!-- 引入 Appender --><appender-ref ref="consoleAppender1"/><appender-ref ref="htmlFileAppender"/><appender-ref ref="rollingFileAppender"/></logger></configuration>
  • 注意:自定义的 Logger 中 name="com.domain.LogTool",那么 LoggerFactory.getLogger(LogTool.class); 中传入 LogTool.java
    时,才会使用自定义的 Logger

  • 其他情况都是使用默认的 Logger(RootLogger)

  • 当然,自定义的 Logger 中 name="com.domain" 时,LoggerFactory.getLogger(LogTool.class); 中传入 com.domain 内的类
    时,也会使用自定义的 Logger

LogTool.java 工具类(非必要)

public class LogTool {private static Logger LOGGER = LoggerFactory.getLogger(Log.class);/*** 添加自定义的 Logger 包下的 类,使用自定义的 Logger** @param c   类的 Class 对象* @param <T> 泛型*/public static <T> void setClassC(Class<T> c) {if (c != null) {LOGGER = LoggerFactory.getLogger(c);}}/*** 使用自定义的 Logger** @param LOGGER Logger*/public static void setLOGGER(Logger LOGGER) {Log.LOGGER = LOGGER;}/*** 输出 日志信息(类对象版)** @param object   类对象* @param logLevel 日志级别*/public static void outputLog(Object object, LogLevel logLevel) {switch (logLevel) {case Trace:LOGGER.trace("追踪 消息 - {}", object);break;case Debug:LOGGER.debug("详细 消息 - {}", object);break;case Info:LOGGER.info("关键 消息 - {}", object);break;case Warn:LOGGER.warn("警告 消息 - {}", object);break;case Error:LOGGER.error("错误 消息 - {}", object);break;default:break;}}/*** 输出 日志信息(信息版)** @param message  消息* @param logLevel 日志级别*/public static void outputLog(String message, LogLevel logLevel) {switch (logLevel) {case Trace:LOGGER.trace("追踪 消息 - { " + message + " }");break;case Debug:LOGGER.debug("详细 消息 - { " + message + " }");break;case Info:LOGGER.info("关键 消息 - { " + message + " }");break;case Warn:LOGGER.warn("警告 消息 - { " + message + " }");break;case Error:LOGGER.error("错误 消息 - { " + message + " }");break;default:break;}}/*** Log 级别 枚举*/public enum LogLevel {/*** 追踪*/Trace,/*** 调试、详细*/Debug,/*** 关键、消息*/Info,/*** 警告*/Warn,/*** 错误*/Error}}

依赖导入

Java 程序

  • Logback-classic 依赖包含了 SLF4j 和 Logback-core 的依赖,导入 Logback-classic 一个就可以了。

<dependencies><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency>
</dependencies>

SpringBoot 项目

  • spring-boot-starter 依赖中包含了 SLF4j 和 Logback,无需导入,当然也可以导入新的 logback 覆盖默认的版本。

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>2.4.5</version></dependency><!--Spring boot Web容器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.4.5</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>2.4.5</version><scope>test</scope></dependency>
</dependencies>

测试


<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>RELEASE</version><scope>test</scope></dependency>
</dependencies>
public class LogbackTest {/*** 测试 工具类 Log*/@Testpublic void test() {/*** root Logger*/Log.setLOGGER(LoggerFactory.getLogger(LogbackTest.class));for (int i = 0; i < 100; i++) {Log.outputLog("trace", Log.LogLevel.Trace);Log.outputLog("debug", Log.LogLevel.Debug);Log.outputLog("info", Log.LogLevel.Info);Log.outputLog("warn", Log.LogLevel.Warn);Log.outputLog("error", Log.LogLevel.Error);}}/*** 测试 工具类 Log*/@Testpublic void test1() {/*** 自定义 Logger*/for (int i = 0; i < 100; i++) {Log.outputLog("trace", Log.LogLevel.Trace);Log.outputLog("debug", Log.LogLevel.Debug);Log.outputLog("info", Log.LogLevel.Info);Log.outputLog("warn", Log.LogLevel.Warn);Log.outputLog("error", Log.LogLevel.Error);}}
}

其他的日志门面与实现框架

  • 第二建议使用的日志框架是:SLF4j + Log4j2。

  • 相应的源码可以到 Gitee 上查看,地址:LJM/journal

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_75592.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux | 1. 挂载新硬盘与磁盘管理

如有错误&#xff0c;恳请指出。 1. Ubuntu挂载新硬盘 查看磁盘状态&#xff1a;sudo fdisk -l 1&#xff09;为新硬盘分区 使用 fdisk 指令对 /dev/sdb 进行分区操作&#xff1a;sudo fdisk /dev/sdb。进入分区工具后&#xff0c;我们可以输入 m 看指令说明&#xff0c;注意…

SQL数据库权限管理-10个数据库角色

为便于管理数据库中的权限&#xff0c;SQL 数据库提供了服务器角色、数据库角色、用户等来划分不同用户拥有的权限差异。今天给大家介绍数据库角色对应的权限。 数据库级角色 存在两种类型的数据库级角色&#xff1a; 数据库中预定义的“固定数据库角色”可以创建的“用户定…

New Bing怼人、说谎、PUA,ChatGPT已经开始胡言乱语了

最近&#xff0c;来自大洋彼岸那头的ChatGPT科技浪潮席卷而来&#xff0c;微软将chatGPT整合搜索引擎Bing开启内测后&#xff0c;数百万用户蜂拥而至&#xff0c;都想试试这个「百事通」。 赶鸭子上架&#xff0c;“翻车”了&#xff1f; 但短短上线十几天&#xff0c;嵌入了…

架构篇之如何画出优秀的架构图(二)

今天是架构篇的第二篇文章,跟大家聊聊如何画出好的架构图。 一、架构图分类 1、业务架构 a. 定义:描述系统对用户提供了什么业务功能。 b. 使用场景: 产品规划业务给高P汇报

高通平台开发系列讲解(Sensor篇)AlsPs的工作原理及介绍

文章目录 一、什么是ALS?二、什么是距感(PS)?三、AlsPs的工作原理四、AlsPs的特性五、距感的校准参数说明六、光感的校准参数说明沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇文章将介绍 AlsPs 的工作原理及介绍。 一、什么是ALS? 光感的英文叫做Ambient Li…

大数据|Hadoop系统

目录 &#x1f4da;Hadoop介绍 &#x1f4da;Hadoop优点 &#x1f4da;Hadoop的体系结构 &#x1f430;HDFS的体系结构 &#x1f430;MapReduce的体系结构 &#x1f430;HDFS和MapReduce的协同作用 &#x1f4da;Hadoop与分布式开发 &#x1f430;MapReduce计算模型 &a…

时钟振荡器的作用

引言 如果电子元件没有时钟&#xff0c;你怎么知道你的信号的频率是多少&#xff1f;频率的定义是一秒振荡的次数。一秒是多久&#xff1f;那么为了知道一秒是多久&#xff0c;电子元件的时钟就很重要了&#xff0c;我们通过频率准确的晶振来产生振荡信号。因为晶振的频率是固…

网络安全从入门到精通:30天速成教程到底有多狠?你能坚持下来么?

毫无疑问&#xff0c;网络安全是当下最具潜力的编程方向之一。对于许多未曾涉足计算机编程的领域「小白」来说&#xff0c;深入地掌握网络安全看似是一件十分困难的事。至于一个月能不能学会网络安全&#xff0c;这个要看个人&#xff0c;对于时间管理不是很高的&#xff0c;肯…

信贷系统学习总结(5)—— 简单的风控示例(含代码)

一、背景1.为什么要做风控?目前我们业务有使用到非常多的AI能力,如ocr识别、语音测评等,这些能力往往都比较费钱或者费资源,所以在产品层面也希望我们对用户的能力使用次数做一定的限制,因此风控是必须的!2.为什么要自己写风控?那么多开源的风控组件,为什么还要写呢?是不是想…

2023上半年北京/上海/广州/深圳NPDP产品经理认证报名

产品经理国际资格认证NPDP是国际公认的唯一的新产品开发专业认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年…

已解决The above exception was the direct cause of the following exception:

已解决RuntimeError: module compiled against API version 0xe but this version of numpy is 0xd ImportError: numpy.core.multiarray failed to import The above exception was the direct cause of the following exception: SystemError: returned a result with an err…

HU4056H耐压高达28V,具有电源OVP功能的1A单节锂离子电池线性充电IC

产品概述 HU4056H是一款完整的采用恒定电流/恒定电压的高压、大电流、单节锂离子电池线性充电 IC。最高耐压可达 28V&#xff0c; 6.5V 自动过压保护&#xff0c;充电电流可达 1A。 由于采用了内部 PMOSFET 架构&#xff0c;加上防倒充电路&#xff0c;所以不需要外部隔离二…

你问我答|虚拟机、容器和无服务器,怎么选?

在新技术层出不穷的当下,每家企业都希望不断降低成本,并提高运营效率,一个方法就是寻找不同的技术方案来优化运营。      例如,曾经一台服务器只能运行一个应用(裸机);接着,一台服务器的资源可以划分为多个块,从而运行多个应用(虚拟化);再到后来,应用越来越多,为了方便它们…

移动字母--降维与DFS

一、题目描述 2x3=6 个方格中放入 ABCDE 五个字母,右下角的那个格空着。如下图所示。 和空格子相邻的格子中的字母可以移动到空格中,比如,图中的 C 和 E 就可以移动,移动后的局面分别是: A B D E C A B C D E 为了表示方便,我们把 6 个格子中字母配置用一个串表示出…

老字号白酒企业——金徽酒借力泛微,升级门户,实现统一办公

金徽酒股份有限公司前身系康庆坊、万盛魁等多个徽酒老作坊基础上组建的省属国营大型白酒企业&#xff0c;曾用名甘肃陇南春酒厂&#xff0c;是国内建厂最早的中华老字号白酒酿造企业之一。2016年3月10日&#xff0c;金徽酒在上海证券交易所挂牌上市。 &#xff08;图片素材来自…

计算机网络技术概述

目录第一章 概述1.1计算机网络在信息时代的作用一、计算机网络各类应用1 信息浏览和发布万维网谷歌、百度等搜索引擎博客、微博2 通信和交流电子邮件、网络电话QQ、Skype微信、Facebook、Twitter3 休闲和娱乐网络电视bilibili、youtube等视频网站互动网络游戏4 资源共享远程文件…

10月17日|实验报告|paddle paddle|概念辨析

目录 一、安装paddle paddle 第一章 零基础入门深度学习 机器学习和深度学习综述 1.人工智能、机器学习、深度学习的关系 1.1人工智能(Artificial Intelligence,AI) 1.2机器学习 1.2.1机器学习的实现 1.2.2机器学习方法论 1.3深度学习​​​​​​​ 一、安装paddle…

Hbase -- Compact工具梳理

1. 背景 当前&#xff0c;线上HBase集群的自动Major Compact是关闭的&#xff0c;我们选择在凌晨业务空闲的时候进行手动触发Major Compact&#xff0c;Compact工具就是在运维平台上对资源组、RS、表进行Major Compact。目前线上有2种版本的Compact程序&#xff1a;Compact_v1…

548、RocketMQ详细入门教程系列 -【消息队列之 RocketMQ (二)】 2023.02.28

目录一、Java 访问 RocketMQ 实例1.1 引入依赖1.2 消息生产者1.3 消息消费者1.4 启动 Name Server1.5 启动 Broker1.6 运行 Consumer1.7 运行 Producer二、参考链接一、Java 访问 RocketMQ 实例 RocketMQ 目前支持 Java、C、Go 三种语言访问&#xff0c;按惯例以 Java 语言为例…

IDEA社区版环境配置和插件安装

一、Java环境安装 1.1 下载openjdk环境安装包 可以进华为镜像站进行下载。参考链接&#xff1a; Index of openjdk-local https://repo.huaweicloud.com/openjdk/ 1.2 配置Java环境 解压缩openjdk到任意路径&#xff0c;建议路径不要有中文。然后把路径的bin文件&#xff0…