当前位置: 首页 > news >正文

日志框架梳理(Log4j,Reload4j,JUL,JCL,SLF4J,Logback,Log4j2)

原文链接

日志框架发展历程

在了解日志框架时总会列出一系列框架:Log4j,Reload4j,JUL,JCL,SLF4J,Logback,Log4j2,这么多框架让人感到混乱,该怎么选取、该怎么用。接下来,让我们逐步理清这些框架及之间的关系。

首先来了解日志框架的发展历程,就能大致清楚这些框架之间的关联和区别。

  1. 1996 年,Log4j 开始出现,并成为一个流行的 Java 日志记录包,后来贡献给 Apache 基金会,但在 2015 年宣布不在维护了。

    reload4j 是 Apache log4j 版本 1.2.17 的一个分支,旨在解决 log4j 的安全问题。Reload4j 是log4j 版本 1.2.17 的直接替代品,所以想继续使用 log4j 1.x 的框架,推荐使用 slf4j-reload4j 进行替代。

  2. 2002 年 Java 1.4 发布,同时推出自己的日志库 JUL(Java Util Logging)。Apache 曾建议 sun 公司 将 Log4j 引入到 jdk 中,但被拒绝了,sun 公司仿照 Log4j,实现一套自己的日志实现框架,即 JUL。

  3. 同时,Apache 推出了 JCL(Jakarta Commons Logging,一个简单的日志门面框架),它提供了一套统一的日志接口,解决 Java 应用程序中使用不同日志框架导致的代码依赖问题,其内部提供了一个 Simple Log 简单日志实现,支持集成使用 Log4j、jdk 1.4(JUL)等具体日志实现。

    JCL最初是由Apache软件基金会的Jakarta 项目组开发的,当时它是 Apache Jakarta 项目的一部分。在2011年,Jakarta 项目组重新组织并成为 Apache Commons 项目。因此,JCL 目前被称为 Apache Commons Logging。

  4. 2006年,log4j 的作者又发布了 SLF4J(Simple Logging Facade for Java,是一个简单的日志门面框架),旨在提供统一的日志API,解决 Java 应用程序中使用不同日志框架导致的代码依赖问题。它比 Apache Commons Logging(JCL)见简单、稳定,支持集成各种日志实现框架(Jul、log4j 1.x、reload4j 和 Logback)。

  5. 同时,SLF4J 的作者顺带推出了 Logback 日志实现框架。

  6. 2014年,Apache 发布了 Log4j2,是 log4j 的官方升级版。

综上:

  • 日志门面技术(规范):JCL、SLF4J
  • 日志实现框架:Log4j 、JUL、Logback、Log4j2。

Log4j

Log4j 介绍

Log4j 有三个主要的组件:日志记录器(Logger),日志输出目标(Appenders)和日志格式化器(Layouts)。

  • 日志记录器(Logger):Logger 组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR 和 FATAL。这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL,分别用来指定这条日志信息的重要程度,只输出级别不低于设定级别的日志信息,假设 Logger 级别设定为 INFO,则INFO、WlARN、 ERROR 和 FATAL 级别的日志信息都会输出,而级别比 INFO 低的 DEBUG 则不会输出。

  • 日志输出目标(Appender):日志输出目标定义了日志消息的输出位置。Log4j 提供了多个内置的输出目标,如控制台、文件、数据库等。开发人员可以根据需要配置一个或多个输出目标来将日志消息输出到不同的位置。

    常使用的类如下:

    • org.apache.log4j.ConsoleAppender(输出到控制台)
    • org.apache.log4j.FileAppender(输出到文件)
    • org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
    • org.apache.log4j.RollingFileAppender(日志文件到达指定大小的时候产生一个新的日志文件)
    • org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
  • 日志格式化器(Layout):日志格式化器定义了日志消息的输出格式。Log4j 提供了多个内置的格式化器,如简单文本格式、HTML格式、XML格式、自由指定样式等。开发人员可以根据需要选择适当的格式化器来控制日志消息的输出样式。

    常使用的类如下:

    • org.apache.log4j.HTMLLayout(以HTML表格形式布局)
    • org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
    • org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
    • org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)

Log4j 配置文件

Log4j 使用一个配置文件来指定日志记录器、输出目标、格式化器等的配置信息。在实际应用中,在 使用 Log4j 之前先设置配置文件。配置文件事实上也就是对 Logger、Appender 及 Layout 进行相应设置。Log4j 支持两种配置文件格式,一种是 XML 格式的文件,一种是 properties 属性文件。下面是以 xml 属性文件的配置示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"><log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"><appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender"><!-- 设置日志输出位置 --><param name="Target" value="System.out" /><!-- 设置日志输出格式 --><layout class="org.apache.log4j.PatternLayout"><param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5p %c{1} : %m%n" /></layout></appender><!-- 指定包下的日志输出级别 -->
<!--    <logger name="com.jcl.demo">-->
<!--        <level value="error"/>-->
<!--    </logger>--><!-- 配置所有包下的日志输出级别, 除了 logger 指定的包>--><root><priority value="info" /><appender-ref ref="ConsoleAppender" /></root></log4j:configuration>

Log4j 使用示例

  1. 引入依赖

    <dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.12</version>
    </dependency>
    
  2. 按照上面 Log4j 设置配置文件

  3. 代码示例

    import org.apache.log4j.Logger;
    import org.junit.Test;public class Log4jTest {@Testpublic void Log4jTest() {Logger log = Logger.getLogger(Log4jTest.class);log.info("info日志打印");log.error("error日志打印");}
    }
    

JUL(Java Util Logging)

JUL 介绍

JUL 是 Java 1.4 版本自带的日志框架,JUL的核心组件是java.util.logging包中的类和接口。Logger是最重要的类,用于创建和管理日志记录器。Handler用于定义日志消息的输出目的地,如控制台、文件等。Formatter定义了日志消息的格式。Level表示日志的级别,JUL定义了七个日志级别,从低到高分别是:ALL、FINEST、FINER、FINE、CONFIG、INFO、WARNING、SEVERE、OFF。

JUL的默认配置是通过配置文件logging.properties进行的。

JUL 使用示例

  1. Java 核心包,所以无需引入其他依赖

  2. 配置 logging.properties 文件设置日志相关信息,不配置取默认设置。

  3. Java 代码示例

    import org.junit.Test;
    import java.util.logging.Logger;public class JulTest {@Testpublic void testLog(){Logger log = Logger.getLogger("com.jcl.demo.JulTest");log.info("info日志打印");}
    }
    

JCL(Jakarta Commons Logging)

JCL 介绍

JCL(Jakarta Commons Logging,一个简单的日志门面技术),它提供了一套统一的日志接口,通过集成不同的日志实现框架来处理日志记录。JCL 是 Apache 中的项目。

前面介绍了 Log4j 和 JUL 日志实现框架,使用两种框架需要分别定义不同框架下的类,随着框架或者业务发展,有时需要使用或替换不同的日志实现框架,这时业务代码中的日志实现是深度耦合的,开发人员修改替换使用的日志类非常麻烦。于是出现了日志门面框架,就是提供一系列通用接口(规范),在业务代码中统一使用日志门面框架提供的接口,日志处理操作交由引入的具体日志实现框架来实现。这就好比 JDBC 数据库驱动,统一调用 JDBC 的接口,具体处理方式由引入的具体驱动包来实现。这样在更换日志实现框架时不需要修改业务代码,解耦特定的日志实现。

JCL 使用示例

  1. JCL 是 Apache 中的项目,所以需要引入依赖包

    <dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version>
    </dependency>
    
  2. 若没有引入其他日志实现框架,默认使用 Java 1.4 自带的日志框架(JUL),若使用 Log4j 日志实现框架,引入相关依赖,配置 log4j.xml。

  3. 代码使用示例,可以看到业务代码使用日志门面框架中的接口类,具体日志处理交由对应的日志实现框架处理,这样在更换日志实现框架时,不需要修改业务代码,只需要对相关日志实现框架进行相应配置即可。

    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.junit.Test;public class JclTest {@Testpublic void testLog(){Log log = LogFactory.getLog(JclTest.class);log.info("info日志打印");log.error("error日志打印");}
    }
    

Logback

logback 使用示例

  1. 引入依赖,这个包依赖了 slf4j-api,所以是 slf4j + logback 的形式。

    <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.12</version>
    </dependency>
    
  2. 配置 logback.xml

    <configuration><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} === %msg%n</pattern></encoder></appender><root level="info"><appender-ref ref="CONSOLE" /></root>
    </configuration>
    
  3. 代码使用示例

    import org.junit.Test;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;public class LogbackTest {@Testpublic void Log4jTest() {Logger log = LoggerFactory.getLogger(LogbackTest.class);log.info("info日志打印");log.error("error日志打印");}
    }
    

SLF4J(Simple Logging Facade For Java)

SLF4J 介绍

SLF4J 也是一个日志门面框架,即简单日志门面(Simple Logging Facade For Java),主要是为了提供一套标准、规范的日志接口,具体的实现交由其他日志实现框架。

参考官网,SLF4J 可以集成使用以下不同的日志实现框架:

  • slf4j-api.jar 包,这是使用 SLF4J 接口需要使用的 jar 包,只引入该 jar 包,使用时会提示没有提供日志实现,默认会去使用 slf4j-nop 日志实现框架,一种无操作的日志记录机制。
  • slf4j-nop.jar 包,这是 SLF4J 的一个日志实现,它实际上是一个空操作的日志记录器。当应用程序使用slf4j-nop作为日志框架时,所有的日志操作都将被忽略,不会有任何实际的日志输出。
  • slf4j-simple.jar 包,这是 SLF4J 的一个简单日志实现,它提供了一个轻量级的日志记录器,适用于简单的应用程序和测试环境。
  • logback-classic.jar + logback-core.jar 包,logback-core是Logback框架的一个核心模块,作为logback-classic的基础组件之一,它提供了Logback框架的核心功能和基本组件;logback-classic 是 Logback 框架的一个核心模块,它建立在logback-core之上,提供了与log4j兼容的API,并且是log4j的继任者。实际引入 logback-classic 包即可,该包中引入了 logback-core 包。
  • reload4j.jar + slf4j-reload4j.jar 包,reload4j 是 log4j 的一个扩展版本,slf4j 需要使用这个三方日志实现框架,需要使用 slf4j-reload4j 适配器(桥接器),即 slf4j ——> slf4j-reload4j ——> reload4j。
  • JUL + slf4j-jdk14.jar 包,JUL 是 Java 1.4 自带的的日志实现框架,slf4j 集成这个日志实现框架使用,同样需要引入 slf4j-jdk14 适配器(桥接器),即 slf4j ——> slf4j-jdk14 ——> JUL。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 深灰色框表示需要引入的 jar 包(如:slf4j-api.jar);
  • 浅蓝色框表示slf4j日志门面框架;
  • 深蓝色框表示slf4j本地的日志实现框架;
  • 绿色框表示需要使用的适配器;
  • 浅灰色框表示其他的日志实现框架;

SLF4J 使用示例

  1. 引入 SLF4J 依赖

    <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.36</version>
    </dependency>
    
  2. 需要引入日志实现框架依赖包,否则默认使用 slf4j-nop,slf4j 本地的日志实现。

    使用 slf4j-nop 日志实现,不输出任何日志,即忽略日志

    <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-nop</artifactId><version>1.7.36</version>
    </dependency>
    

    使用 reload4j 日志实现,需要引入桥接器,配置 log4j.xml

    <!-- 桥接器 -->
    <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-reload4j</artifactId><version>1.7.36</version>
    </dependency>
    <!-- reload4j 日志实现框架 -->
    <dependency><groupId>ch.qos.reload4j</groupId><artifactId>reload4j</artifactId><version>1.2.25</version>
    </dependency>
    

    使用 jul 日志实现,jul java 自带,不需要引入包,但需要引入桥接器

    <!-- jul 日志实现需要引入的桥接器 -->
    <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-jdk14</artifactId><version>1.7.36</version>
    </dependency>
    

    使用 logback 日志实现,配置 logback.xml

    <!-- logback 日志实现, slf4j 本地的日志实现, logback-classic 包中包含 logback-core -->
    <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.12</version>
    </dependency>
    

    使用 log4j2 日志实现,配置 log4j2.xml

    <!-- 使用 Log4j2 日志实现框架 -->
    <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.17.1</version>
    </dependency>
    <!-- 桥接器 -->
    <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>2.17.1</version>
    </dependency>
    
  3. 代码使用示例

    import org.junit.Test;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;public class Slf4jTest {@Testpublic void Log4jTest() {Logger log = LoggerFactory.getLogger(Slf4jTest.class);log.info("info日志打印");log.error("error日志打印");}
    }
    

Log4j2

Log4j2 是 Log4j 的升级版。

logback 使用示例

  1. 引入依赖,这个包依赖了 slf4j-api,所以是 slf4j + logback 的形式。

    <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.17.1</version>
    </dependency>
    
  2. 配置 logback.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="WARN"><Appenders><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} == %msg%n" /></Console></Appenders><Loggers><Root level="info"><AppenderRef ref="Console" /></Root></Loggers>
    </Configuration>
    
  3. 代码使用示例

    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    import org.junit.Test;public class Log4j2Test {@Testpublic void Log4jTest() {Logger log = LogManager.getLogger(Log4j2Test.class);log.info("info日志打印");log.error("error日志打印");}
    }
    

​ 日志框架梳理(Log4j,Reload4j,
JUL,JCL,SLF4J,Logback,Log4j2)

相关文章:

日志框架梳理(Log4j,Reload4j,JUL,JCL,SLF4J,Logback,Log4j2)

原文链接 日志框架发展历程 在了解日志框架时总会列出一系列框架&#xff1a;Log4j&#xff0c;Reload4j&#xff0c;JUL&#xff0c;JCL&#xff0c;SLF4J&#xff0c;Logback&#xff0c;Log4j2&#xff0c;这么多框架让人感到混乱&#xff0c;该怎么选取、该怎么用。接下来…...

内核无锁队列kfifo

文章目录 1、抛砖引玉2、内核无锁队列kfifo2.1 kfifo结构2.2 kfifo分配内存2.3 kfifo初始化2.4 kfifo释放2.5 kfifo入队列2.6 kfifo出队列2.7 kfifo的判空和判满2.8 关于内存屏障 1、抛砖引玉 昨天遇到这样一个问题&#xff0c;有多个生产者&#xff0c;多个消费者&#xff0c…...

18、XSS——cookie安全

文章目录 1、cookie重要字段2、子域cookie机制3、路径cookie机制4、HttpOnly Cookie机制5、Secure Cookie机制6、本地cookie与内存cookie7、本地存储方式 一般来说&#xff0c;同域内浏览器中发出的任何一个请求都会带上cookie&#xff0c;无论请求什么资源&#xff0c;请求时&…...

从零开发短视频电商 Jmeter压测示例模板详解(无认证场景)

文章目录 添加线程组添加定时器添加HTTP请求默认值添加HTTP头管理添加HTTP请求添加结果断言响应断言 Response AssertionJSON断言 JSON Assertion持续时间断言 Duration Assertion 添加察看结果树添加聚合报告添加表格察看结果参考 以压测百度搜索为例 https://www.baidu.com/s…...

C++可以函数重载而C不可以的原因

函数重载是指在同一个作用域内&#xff0c;可以定义多个函数&#xff0c;它们具有相同的名称但是参数列表不同。函数重载的主要原理是函数的签名不同&#xff0c;而在 C 中&#xff0c;函数签名包括函数的名称和参数列表。而在 C 中&#xff0c;函数的标识仅依赖于函数的名称&a…...

Spark常见算子汇总

创建RDD 在Spark中创建RDD的方式分为三种: 从外部存储创建RDD从集合中创建RDD从其他RDD创建 textfile 调用SparkContext.textFile()方法&#xff0c;从外部存储中读取数据来创建 RDD parallelize 调用SparkContext 的 parallelize()方法&#xff0c;将一个存在的集合&…...

【华为数据之道学习笔记】3-1 基于数据特性的分类管理框架

华为根据数据特性及治理方法的不同对数据进行了分类定义&#xff1a;内部数据和外部数据、结构化数据和非结构化数据、元数据。其中&#xff0c;结构化数据又进一步划分为基础数据、主数据、事务数据、报告数据、观测数据和规则数据。 对上述数据分类的定义及特征描述。 分类维…...

电脑版便签软件怎么设置在桌面上显示?

对于不少上班族来说&#xff0c;如果想要在使用电脑办公的时候&#xff0c;随手记录一些常用的工作资料、工作注意事项等内容&#xff0c;直接在电脑上使用便签软件记录是比较方便的。电脑桌面便签工具不仅方便我们随时记录各类工作事项&#xff0c;而且支持我们快速便捷使用这…...

【华为数据之道学习笔记】2-建立企业级数据综合治理体系

数据作为一种新的生产要素&#xff0c;在企业构筑竞争优势的过程中起着重要作用&#xff0c;企业应将数据作为一种战略资产进行管理。数据从业务中产生&#xff0c;在IT系统中承载&#xff0c;要对数据进行有效治理&#xff0c;需要业务充分参与&#xff0c;IT系统确保遵从&…...

【IC前端虚拟项目】git和svn项目托管平台的简单使用说明

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 代码托管在gitee平台上&#xff0c;进去后会看到文档目录“MVU芯片前端设计验证虚拟项目”和工程目录“mvu_prj”&#xff0c;可以通过git来下载工程&#xff1a; git clone gitgitee.com:gjm9999/ic_vi…...

C++ IO库

IO类 IO对象不能拷贝和赋值 iostream 表示形式的变化&#xff1a; 将100转换成二进制序列 然后格式化输出 x,y共用一块内存 输出的时候用不同的方式解析同一块内存 操作 格式化&#xff1a;内部表示转换为相应字节序列 缓存&#xff1a;要输出的内容放到缓存 编码转换&…...

Springboot 项目关于版本升级到 3.x ,JDK升级到17的相关问题

由于spring 停止对2.x 版本的维护&#xff0c;以及 jdk 频繁发布等客观因素&#xff0c;现需要对已有springboot 工程做一次全面升级&#xff1b;已因对市面上第三方等依赖库的兼容问题&#xff1b; 现有工程使用哥技术栈是版本&#xff1a; freemarker &#xff1a;2.3.32 spr…...

QGraphicsView实现简易地图7『异步加载-多瓦片-无底图』

前文链接&#xff1a;QGraphicsView实现简易地图6『异步加载-单瓦片-无底图』 前一篇文章提到的异步单瓦片加载&#xff0c;是指线程每准备好一个瓦片数据后&#xff0c;立刻抛出信号让主线程加载。而本篇异步多瓦片加载是指线程准备好所有瓦片数据后&#xff0c;一起抛出信号让…...

Spring Boot学习(三十三):集成kafka

前言 下面是zookeeper和kafka的官网下载地址&#xff0c;大家可以学习下载 zookeeper下载地址&#xff1a;http://zookeeper.apache.org/releases.html kafka下载地址&#xff1a;http://kafka.apache.org/downloads.html 1、添加依赖 在 pom.xml 文件中添加kafka依赖&am…...

MOSFET

MOSFET 电子元器件百科 文章目录 MOSFET前言一、MOSFET是什么二、MOSFET类别三、MOSFET应用实例四、MOSFET作用原理总结前言 MOSFET是一种常见的半导体器件,通过栅极电场控制通道区的导通特性,以控制电流流动。它在现代电子电路中发挥着重要的作用,并广泛应用于各种应用领域…...

DriveWorks——参数化设计非标定制利器

DriveWorks基本介绍 DriveWorks是一套被 SOLIDWORKS 认可为金牌合作伙伴产品的设计自动化软件。DriveWorks 可自动创建特定于订单的销售文档和 SOLIDWORKS 制造数据。减少重复性任务&#xff0c;消除错误&#xff0c;增加销售额&#xff0c;并在创纪录的时间内交付定制产品。 为…...

DevEco Studio集成ArkUI-X

语雀知识库地址&#xff1a;语雀HarmonyOS知识库 飞书知识库地址&#xff1a;飞书HarmonyOS知识库 在上篇文章(HarmonyOS应用开发工具DevEco Studio安装与使用)中我说到官方推出了4.0 Beta版本的IDE&#xff0c;这篇文章就来介绍这个版本的安装与使用 该版本集成了HarmonyOS多…...

网络视频服务器的作用是什么?

随着互联网的快速发展和网络带宽的提升&#xff0c;网络视频已经成为人们日常生活中不可或缺的一部分。网络视频服务器作为支持和传输网络视频的关键基础设施&#xff0c;发挥着重要的作用。本文将以网络视频服务器的作用为方向&#xff0c;探讨其在现代社会中的重要性。 首先…...

解决vue3使用iconpark控制台预警提示问题

前言 最近在项目中使用 iconpark-icon 来管理图标&#xff0c;一切都很顺利&#xff0c;引入链接后&#xff0c;图标正常显示&#xff0c;没有报错。但是控制台却发出了预警信息。 [Vue warn]: Failed to resolve component: iconpark-icon If this is a native custom eleme…...

VMware 虚拟机 NAT 模式网络配置

配置的核心点在于 网关要一致&#xff0c;才能访问外网 比如下面的网关都是&#xff1a;192.168.145.2 问题总结&#xff1a; 当时重启电脑后如果连不上外网了&#xff0c;检查下 windows 服务中 NAT服务是否已经启动...

5-redis高级-哨兵

1 哨兵 1.1 python 操作哨兵 1 哨兵 # 主从---》一主多从-主库用来写-从库用来读-主库挂了--》整个系统就不能写数据了#主从复制存在的问题&#xff1a;1 主从复制&#xff0c;主节点发生故障&#xff0c;需要做故障转移&#xff0c;可以手动转移&#xff1a;让其中一个slave变…...

鸿蒙HarmonyOS4.0开发应用学习笔记

黑马程序员鸿蒙4.0视频学习笔记&#xff0c;供自己回顾使用。1.安装开发工具DevEco Studio 鸿蒙harmony开发文档指南 DevEco Studio下载地址 选择或者安装环境 选择和下载SDK 安装总览 编辑器界面 2.TypeScript语法 2.1变量声明 //string 、number、boolean、any、u…...

联通宽带+老毛子Padavan固件 开启IP v6

联通宽带开启IP v6 参考&#xff1a; 联通宽带开启 IPV6 的方法_联通ipv6怎么开通-CSDN博客 个人宽带如何开启IPv6网络访问 - 知乎 (zhihu.com) 首先&#xff0c;你要确定当前你所在的地区运营商已经开通了IPV6&#xff0c;可以使用手机流量 IP查询(ipw.cn) | IPv6测试 | IPv…...

唯创知音WT2003Hx系列单片机语音芯片:家庭理疗产品的智能声音伴侣

随着科技的不断创新&#xff0c;家庭理疗产品正迎来一场智能化的变革。唯创知音的WT2003Hx系列单片机语音芯片以其强大的功能和高品质音频播放能力&#xff0c;为家庭理疗产品带来了更为智能、沉浸式的用户体验。 1. MP3高品质音频播放 WT2003Hx系列语音芯片支持高品质的MP3音…...

2023_Spark_实验二十七:Linux中Crontab(定时任务)命令详解及使用教程

Crontab介绍&#xff1a; Linux crontab是用来crontab命令常见于Unix和类Unix的操作系统之中&#xff0c;用于设置周期性被执行的指令。该命令从标准输入设备读取指令&#xff0c;并将其存放于“crontab”文件中&#xff0c;以供之后读取和执行。该词来源于希腊语 chronos(χρ…...

Java动态代理实现与原理详细分析

Java动态代理实现与原理详细分析 关于Java中的动态代理&#xff0c;我们首先需要了解的是一种常用的设计模式–代理模式&#xff0c;而对于代理&#xff0c;根据创建代理类的 时间点&#xff0c;又可以分为静态代理和动态代理。 1、代理模式 代理模式是常用的java设计模式&…...

[实践总结] 使用Apache HttpClient 4.x进行进行一次Http请求

使用Apache HttpClient 4.x进行进行一次Http请求 依赖 <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactI…...

易宝OA 两处任意文件上传漏洞复现

0x01 产品简介 易宝OA系统是一种专门为企业和机构的日常办公工作提供服务的综合性软件平台,具有信息管理、 流程管理 、知识管理(档案和业务管理)、协同办公等多种功能。 0x02 漏洞概述 易宝OA系统UploadFile、BasicService.asmx等接口处存在文件上传漏洞,未授权的攻击者可…...

echart饼图高亮颜色设置,数据为0时候,labelLine不显示

鼠标移上去高亮&#xff0c;颜色变浅&#xff0c;希望不改变颜色 在series.data中为各项设置itemStyle&#xff0c;官方设置不生效&#xff0c;不知原因&#xff0c;可能版本问题 itemStyle: {normal: { color: #DFEAFF, },emphasis: { color: #DFEAFF }},数据为0时候显示饼图…...

Kafka 的消息格式:了解消息结构与序列化

Kafka 作为一款高性能的消息中间件系统&#xff0c;其消息格式对于消息的生产、传输和消费起着至关重要的作用。本篇博客将深入讨论 Kafka 的消息格式&#xff0c;包括消息的结构、序列化与反序列化&#xff0c;以及一些常用的消息格式选项。通过更丰富的示例代码和深入的解析&…...

装箱 Box 数据类型

装箱是最简单直接的一种智能指针&#xff0c;它的类型是Box<T>。装箱使我们可以把数据存储到堆上&#xff0c;并在栈上保留一个指向堆数据的指针。装箱操作常常被用于下面的场景&#xff1a; 当你拥有一个无法在编译时确定大小的类型&#xff0c;但又想使用这个类型的值…...

多传感器融合SLAM在自动驾驶方向的初步探索的记录

1. VIO的不可观问题 现有的VIO都是解决的六自由度的问题, 但是对于行驶在路面上的车来说, 通常情况下不会有roll与z方向的自由度, 而且车体模型限制了不可能有纯yaw的变换. 同时由于IMU在Z轴上与roll, pitch上激励不足, 会导致IMU在初始化过程中尺度不准以及重力方向估计错误,…...

ffmpeg与opencv-python处理视频

安装 opencv pip install opencv-pythonFFmpeg 1.下载 FFmpeg 访问FFmpeg官方网站。选择 “Windows builds from gyan.dev” 链接&#xff0c;这会带您到一个包含最新版本 FFmpeg Windows 构建的页面。选择一个适合您系统的版本&#xff08;例如&#xff0c;32位或64位&…...

java 操作git

​ 实现功能&#xff1a;借助jgit实现拉取文件&#xff0c;并返回文件路径清单 <!-- 依赖库 版本号有自行选择&#xff0c;只是需要注意支持的jdk版本即可&#xff0c;我使用的是jdk1.8--> <dependency><groupId>org.eclipse.jgit</groupId><artif…...

Linux 导入、导出 MySQL 数据库命令

一、导出数据库 1、导出完整数据&#xff1a;表结构数据 mysqldump -u用户名 -p 数据库名 > 数据库名.sql 举例&#xff1a;以下命令可以导出 abc 数据库的数据和表结构 /usr/local/mysql/bin/mysqldump -uroot -p abc > abc.sql2、只导出表结构 mysqldump -u用户名 -p…...

华为数通---BFD多跳检测示例

定义 双向转发检测BFD&#xff08;Bidirectional Forwarding Detection&#xff09;是一种全网统一的检测机制&#xff0c;用于快速检测、监控网络中链路或者IP路由的转发连通状况。 目的 为了减小设备故障对业务的影响&#xff0c;提高网络的可靠性&#xff0c;网络设备需要…...

AWS 日志分析工具

当您的网络资源托管在 AWS 中时&#xff0c;需要定期监控您的 AWS CloudTrail 日志、Amazon S3 服务器日志和 AWS ELB 日志等云日志&#xff0c;以降低任何潜在的安全风险、识别严重错误并确保满足所有合规性法规。 什么是 Amazon S3 Amazon Simple Storage Service&#xff…...

gitLab 和Idea分支合并

以下二选1即可完成分支合并建议第一种简单有效 Idea合并方式 切换到被合并的分支&#xff0c;如我想把0701的内容合并到dev&#xff0c;切换到dev分支&#xff0c;然后再点击merge然后选择要合并的分支&#xff0c;即可,此时git上的代码没有更新只是把代码合到本地需要pull才…...

关于 mapboxgl 的常用方法及效果

给地图标记点 实现效果 /*** 在地图上添加标记点* point: [lng, lat]* color: #83f7a0*/addMarkerOnMap(point, color #83f7a0) {const marker new mapboxgl.Marker({draggable: false,color: color,}).setLngLat(point).addTo(this.map);this.markersList.push(marker);},…...

C语言——二级指针

指针变量也是变量&#xff0c;是变量就有地址&#xff0c;那么指针变量的地址存放在哪里&#xff1f;——这就是二期指针 int a 10;int *pa &a;int **ppa &pa;//a的地址存放在pa中&#xff0c;pa的地址存放在ppa中。 //pa是一级指针&#xff0c;ppa是二级指针。 对…...

股市复苏中的明懿金汇:抓住新机遇

2023年对于明懿金汇来说是充满挑战与机遇的一年。面对复杂多变的市场环境&#xff0c;明懿金汇展现了其对市场趋势的敏锐洞察和卓越的策略适应能力。以下是该公司在2023年的主要投资策略和市场适应方式的详细分析。 随着2023年中国股市迎来反弹&#xff0c;明懿金汇迅速调整了…...

Spacemesh、Kaspa和Chia的全面对比!

当今区块链领域&#xff0c;PoST&#xff08;Proof of Space and Time&#xff09;共识算法引领着一股新的技术浪潮。在这个热潮下&#xff0c;Chia项目作为PoST共识机制的经典项目&#xff0c;和目前算力赛道备受瞩目的Kaspa项目&#xff0c;都是不可忽视的存在。虽然这两个项…...

【HTML语法】

HTML语法 1. HTML语法1.1 HTML编辑器1.2 HTML模板1.3 标签示例1.4 常见的HTML标签1.51.61.71.81.91.101.11 学习网站&#xff1a;https://www.runoob.com/html/html-tutorial.html 1. HTML语法 HTML&#xff08;全称 Hypertext Markup Language&#xff0c;超文本标记语言&…...

ROS报错:RLException:Invalid roslaunch XML Syntax: mismatched tag:

运行roslaunch文件提示&#xff1a; RLException:Invalid roslaunch XML Syntax: mismatched tag: line 45&#xff0c; column 2 The traceback for the exception was written to the log file. j 解决办法&#xff1a; line45 行多了标签&#xff1a;</node> 另外…...

C语言实现快速排序

完整代码&#xff1a; #include<stdio.h>//用第一个元素将待排序序列划分成左右两个部分&#xff0c;返回排序后low的位置&#xff0c;即枢轴的位置 int partition(int arr[],int low,int high){//让待排序序列中的第一个元素成为基准int pivotarr[low];//lowhigh代表一…...

ChatGPT对于当今的社会或科技发展有何重要性?

ChatGPT对于当今社会和科技发展的重要性在于&#xff1a; 促进社交交流&#xff1a;ChatGPT可以为人们提供全天候的在线聊天服务&#xff0c;连接人与人之间的沟通交流&#xff0c;改善社交沟通方式。 提高有效性和效率&#xff1a;人们可以通过ChatGPT获得快速和精确的信息&a…...

宝塔是可以切换mongodb版本的

在软件商店&#xff0c;搜索monggodb&#xff0c;点击设置。点击第三个标签版本切换即可。但是前提要删除所有非系统数据库。 删除数据库方法&#xff1a; 要在 MongoDB 中删除一个数据库&#xff0c;可以使用 dropDatabase() 命令。请注意&#xff0c;在执行此操作之前&#x…...

16、XSS——会话管理

文章目录 一、web会话管理概述1.1 会话管理1.2 为什么需要会话管理&#xff1f;1.3 常见的web应用会话管理的方式 二、会话管理方式2.1 基于server端的session的管理方式2.2 cookie-based的管理方式2.3 token-based的管理方式 三、安全问题 一、web会话管理概述 1.1 会话管理 …...

稀疏矩阵的操作(数据结构实训)

题目&#xff1a; 标准输入输出 题目描述&#xff1a; 稀疏矩阵可以采用三元组存储。 输入&#xff1a; 输入包含若干个测试用例&#xff0c;每个测试用例的第一行为两个正整数m,n(1<m,n<100),表示矩阵的行数和列数,接下来m行&#xff0c;每行n个整数&#xff0c;表示稀疏…...

sqlite - sqlite3_exec - c++回调函数的处理

文章目录 sqlite - sqlite3_exec - c回调函数的处理概述笔记回调赋值实现用到的数据结构回调分发函数的实现具体的回调处理sqlite3_exe执行完后, 行集的具体处理END sqlite - sqlite3_exec - c回调函数的处理 概述 以前给客户写了个小程序, 处理sqlite执行sql时, 给定回调, 等…...