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

北京建设监理网站/广州seo网站推广优化

北京建设监理网站,广州seo网站推广优化,网站开发的重难点,网站怎么做投票文章目录 一.什么是Logback1.1 初识Logbcak 二.Logbcak的结构三.日志的级别四.配置组件详解4.1 logger 日志记录器属性的介绍如何在配置文件里配置 4.2 appender 附加器 配合日志记录器的输出格式4.2.1 控制台附加器4.2.2 文件附加器4.3.3滚动文件附加器 4.3 Filter: 过滤器&am…

文章目录

  • 一.什么是Logback
    • 1.1 初识Logbcak
  • 二.Logbcak的结构
  • 三.日志的级别
  • 四.配置组件详解
    • 4.1 logger 日志记录器
      • 属性的介绍
      • 如何在配置文件里配置
    • 4.2 appender 附加器 配合日志记录器的输出格式
      • 4.2.1 控制台附加器
      • 4.2.2 文件附加器
      • 4.3.3滚动文件附加器
    • 4.3 Filter: 过滤器,用于根据指定的条件过滤日志。
  • 五.springboot整合logbcak

一.什么是Logback

Logback 旨在作为流行的 log4j 项目的继承者。它是由 log4j 的创始人 Ceki Gülcü 设计的。它建立在十年来设计工业级测井系统的经验之上。由此产生的产品,即 logback,比所有现有的日志系统速度更快,占用空间更小,有时甚至相差很大。同样重要的是,logback 提供了其他日志系统所缺少的 独特且相当有用的功能。

看了上述文字的说明,我们是否对logback还有些困惑,我们可以开始使用logback的第一个程序,来认识一下logbcak

1.1 初识Logbcak

  • 1.创建Maven项目
    在这里插入图片描述

  • 2.增加maven依赖

    <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.11</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.36</version></dependency>
  • 3.新建第一个helloword程序
package com.gongli;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** Hello world!**/public class App {private static final Logger logger= LoggerFactory.getLogger(App.class);public static void main(String[] args) {logger.info("hello world");}
}

这段代码展示了如何使用日志记录器来记录程序的运行信息。它创建了一个名为 App 的类,并在其中定义了一个 main 方法。在 main 方法中,它使用 LoggerFactory 类获取了一个日志记录器对象,并使用该对象记录了一条信息日志。

二.Logbcak的结构

认识到第一个日入门日志以后,我们就开始认识Logbcak的结构。如图:
在这里插入图片描述

Logger, Appender 和 Layouts

Logback 构建在三个主要的类上:Logger,Appender 和 Layouts。这三个不同类型的组件一起作用能够让开发者根据消息的类型以及日志的级别来打印日志。
Logger 类作为 logback-classic 模块的一部分。Appender 与 Layouts 接口作为 logback-core 的一部分。作为一个通用的模块,logback-core 没有 logger 的概念。

三.日志的级别

在具体了解日志配置文件之间,我们必须先知道日志的级别是什么?
日志级别用于控制哪些日志会被记录。日志级别从高到低依次为:

FATAL: 致命错误,表示程序无法继续运行。
ERROR: 错误,表示程序发生了错误,但仍能继续运行。
WARN: 警告,表示程序可能发生错误,但不影响程序的正常运行。
INFO: 信息,用于记录程序的正常运行状态。
DEBUG: 调试,用于记录程序的运行细节。
TRACE: 跟踪,用于记录程序的运行轨迹。

大小从上往下依次减小,这条规则是 logback 的核心。它假设级别按如下顺序排序: TRACE < DEBUG < INFO < WARN < ERROR。

例如以下程序,我设父类日志的级别为error ,你猜一下子类的日志级别info会正常输出吗?

    public static void main(String[] args) {//我设父类的日志级别为Infoch.qos.logback.classic.Logger logger1=( ch.qos.logback.classic.Logger) LoggerFactory.getLogger("com");logger1.setLevel(Level.ERROR);logger1.info("hello world");}

答案是显然不会
在这里插入图片描述
我们再来做一个实验,如果我们指定了根的日志级别,也指定了根的子类级别。你想想看我们的日志级别是遵守根的,还是遵守子类的呢?话不多说,我们来试试看。

  public static void main(String[] args) {//我设父类的日志级别为Infoch.qos.logback.classic.Logger logger1=( ch.qos.logback.classic.Logger) LoggerFactory.getLogger("com.gongli.App");ch.qos.logback.classic.Logger rootlogger=( ch.qos.logback.classic.Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);rootlogger.setLevel(Level.WARN);logger1.setLevel(Level.INFO);System.out.println(logger1.getEffectiveLevel());logger1.trace("hello world");}

事实证明,在我子类设置的情况下,我们会遵循子类的日志级别
在这里插入图片描述
从而我们得出一个结论,如果子类包没设置级别,就会往上一级找,如果上一级也没设置,就默认日志级别打印。
在这里插入图片描述

四.配置组件详解

4.1 logger 日志记录器

属性的介绍

每个记录器Logger的属性有两个属性

  • name属性:记录器的名称

  • level尾性(可选): 记录的级别,允许的级别从低到高,TRACE< DEBUG<INFO< WARN<ERROR
    logger.setLevel()
    logger.getLevel():
    logger.getEffectiveLevel()
    additivity属性(可选): 是否允许爱加打印日志,true或false

  • 说明:
    1)如果记录器未设置level属性,则该记录器的级别从上级记录器继承
    2)如果想查看记录器的级别,应该通过logger.getEffectiveLevel方法,同时要将Logger转为
    ch.qos.logback.classic.Logger类型,如下:
    ch.gos.logbackclassic.Logger logger =
    (ch.qos.logbackclassic.Logger) LoggerFactory.getLogger(App.class);

举一个代码的例子,你们就懂我在说什么了

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class App {private static final Logger logger = LoggerFactory.getLogger(App.class);public static void main(String[] args) {// 设置 logger 的名称logger.setName("MyLogger");// 设置 logger 的级别logger.setLevel(Level.INFO);// 获取 logger 的级别Level level = logger.getLevel();// 获取 logger 的有效级别Level effectiveLevel = logger.getEffectiveLevel();// 检查 logger 的 additivity 属性boolean additivity = logger.isAdditive();System.out.println("logger 的名称:" + logger.getName());System.out.println("logger 的级别:" + level);System.out.println("logger 的有效级别:" + effectiveLevel);System.out.println("logger 的 additivity 属性:" + additivity);}
}

如何在配置文件里配置

使用logback-test.xml或 logback.xml进行配置
这里分为两步
1.新建一个logback.xml
文件内容如下:

<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.padual.com/java/logback.xsd"><root level="debug"> // 设置root的</root><logger name="com.aa" level="error"></logger> //声明一个记录器
</configuration>

2.编写java代码

 public static void main(String[] args) {ch.qos.logback.classic.Logger rootlogger=( ch.qos.logback.classic.Logger) LoggerFactory.getLogger("root");System.out.println(rootlogger.getEffectiveLevel());ch.qos.logback.classic.Logger logger=( ch.qos.logback.classic.Logger) LoggerFactory.getLogger("com.aa");System.out.println(logger.getEffectiveLevel());}
}

4.2 appender 附加器 配合日志记录器的输出格式

Logback 将写入日志事件的任务委托给称为附加程序的组件。Appender 必须实现该日志记录器的 接口。
常用的附加器如下:
控制台附加器:ch.qos.logback.core.ConsoleAppender
文件附加器: ch.qos.logback.core.FileAppender
滚动文件附加器: ch.gos.logback.core.rolling.RollingFileAppender

4.2.1 控制台附加器

控制台附加器(ch.qos.logback.core.ConsoleAppender)的常用参数如下:

name:附加器的名称。
encoder:编码器。
target:目标。默认为 System.out。
encoding:编码。默认为 UTF-8。
immediateFlush:是否立即刷新。默认为 true。
filter:日志过滤器。
以下是这些参数的具体说明:

  • name
    name 属性指定附加器的名称。名称用于标识附加器。

  • encoder
    encoder 属性指定编码器。编码器用于格式化日志。

  • target
    target 属性指定目标。目标用于指定日志输出的位置。默认为 System.out。

  • encoding
    encoding 属性指定编码。编码用于指定日志的编码格式。默认为 UTF-8。

  • immediateFlush
    immediateFlush 属性指定是否立即刷新。如果为 true,则日志将在写入到控制台之前立即刷新。如果为 false,则日志将在缓冲区满时刷新。

  • filter
    filter 属性指定日志过滤器。日志过滤器用于过滤日志。
    例子:
    logback.xml文件配置如下

<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.padual.com/java/logback.xsd">//这里就是声明控制台附加器<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder> //日志格式化格式<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern></encoder></appender><logger name="com.gongli" level="info">//加入附加器<appender-ref ref="STDOUT" /></logger>
</configuration>

代码如下:

   public static void main(String[] args) {ch.qos.logback.classic.Logger logger1=( ch.qos.logback.classic.Logger) LoggerFactory.getLogger("com.gongli.App");logger1.info("hello world");}
}

在这里插入图片描述

4.2.2 文件附加器

文件附加器(ch.qos.logback.core.FileAppender)的常用参数如下:

name:附加器的名称。
file:日志文件的路径。
append:是否追加日志。默认为 true。
encoder:编码器。
rollingPolicy:滚动策略。
filter:日志过滤器。
以下是这些参数的具体说明:

  • name
    name 属性指定附加器的名称。名称用于标识附加器。

  • file
    file 属性指定日志文件的路径。

  • append
    append 属性指定是否追加日志。如果为 true,则日志将追加到现有文件中。如果为 false,则日志将覆盖现有文件。

  • encoder
    encoder 属性指定编码器。编码器用于格式化日志。

  • rollingPolicy
    rollingPolicy 属性指定滚动策略。滚动策略用于控制日志文件的滚动方式。

  • filter
    filter 属性指定日志过滤器。日志过滤器用于过滤日志。
    例子
    logbcak.xml文件

<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.padual.com/java/logback.xsd"><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern></encoder></appender><appender name="File" class="ch.qos.logback.core.FileAppender"><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern></encoder><file>myfile.log</file>//文档<append>true</append> //是否追加数据</appender><logger name="com.gongli" level="info"><appender-ref ref="STDOUT" /><appender-ref ref="File" /></logger>
</configuration>

java代码

  public static void main(String[] args) {ch.qos.logback.classic.Logger logger1=( ch.qos.logback.classic.Logger) LoggerFactory.getLogger("com.gongli.App");logger1.info("hello world");}
}

在这里插入图片描述

4.3.3滚动文件附加器

这里要特别说明一下这几个参数
Logback 提供了多种滚动策略,包括:
SizeBasedRollingPolicy:根据文件大小滚动日志文件。(ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy)
TimeBasedRollingPolicy:根据时间滚动日志文件。(ch.qos.logback.core.rolling.TimeBasedRollingPolicy)
说说他们之间的区别
区别

SizeBasedRollingPolicy 和 TimeBasedRollingPolicy 的主要区别在于滚动触发条件的不同。SizeBasedRollingPolicy 的滚动触发条件是文件大小,而 TimeBasedRollingPolicy 的滚动触发条件是时间。
例如:

<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>/var/log/myapp.log</file><append>true</append><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern></encoder><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><maxFileSize>10MB  </maxFileSize></maxHistory>30</maxHistory></rollingPolicy>
</appender>

在上述配置中,maxFileSize 属性指定日志文件的最大大小为 10MB。当日志文件的大小达到 10MB 时,将会创建一个新的日志文件,并将原来的日志文件重命名为 myapp.log.1。

<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>/var/log/myapp.log</file><append>true</append><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern></encoder><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>myapp.log.%d{yyyy-MM-dd}</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy>
</appender>

在上述配置中,fileNamePattern 属性指定新日志文件的文件名模式为 myapp.log.yyyy-MM-dd。也就是说,每天将会创建一个新的日志文件。

4.3 Filter: 过滤器,用于根据指定的条件过滤日志。

过滤器是附加器的一个组件,它用于决定附加器是否输出日志。一个附加器可以包合一个或多个过滤器。
每个过滤器都会返回一个枚举值,可选的值: DENY、 NEUTRAL、ACCEPT
附加器根据过滤器返回值判断是否输出日志:
DENY : 不输出日志
ACCEPT: 输出日志
NEUTRAL : 中立,即不决定是否输出日志

常用的过滤器如下:
LevelFilter(级别过滤器): 实现类 ch.qos.logback.classic.filter.LevelFilter
ThresholdFilter(闽值过滤器): 实现类 ch.gos.logback.classic.filter.ThresholdFilter
EvaluatorFilter(评估者过滤器): 实现类 ch.qos.logback.core.filter.EvaluatorFilter
JaninoEventEvaluator过滤器: 实现类 ch.qos.logback.core.filter.EvaluatorFilter
TurboFilter涡轮过滤器
DuplicateMessageFilter 重复消息过滤器

这里举一个简单的例子LevelFilter(级别过滤器)

   <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>INFO</level><OnMatch>ACCEPT</OnMatch><onMismatch>DENY</onMismatch></filter><logger name="com.gongli" level="info"><appender-ref ref="STDOUT" /></logger>

具体说明:
如果程序记录了一条 INFO 级别的日志,由于其级别与 level 属性匹配,会被 OnMatch 属性接受,因此会输出到控制台。
如果程序记录了一条 DEBUG 级别的日志,由于其级别低于 level 属性,会被 onMismatch 属性拒绝,因此不会输出到控制台。

五.springboot整合logbcak

Spring Boot 默认使用 Logback 作为日志框架。要将 Logback 整合到 Spring Boot 项目中,只需在项目的 pom.xml 文件中添加以下依赖:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></dependency>
</dependencies>

接下来,需要在项目的 application.properties 文件中配置 Logback。Logback 的配置文件格式为 XML。可以使用以下示例来配置 Logback:

logging.config=classpath:my-logback.xml

然后我们在resource下面新建my-logback.xml
文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern></encoder></appender><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>myapp.log</file><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern></encoder><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>myapp.log.%d{yyyy-MM-dd}</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy></appender><logger name="com.example.myapp" level="DEBUG"><appender-ref ref="STDOUT" /><appender-ref ref="FILE" /></logger><root level="INFO"><appender-ref ref="STDOUT" /></root></configuration>

如果大家想深入了解logbcak,建议去它的官网去看看,内容给很多,我把官网粘在这里里
https://logback.qos.ch/manual/introduction.html

相关文章:

Logback框架基本认识

文章目录 一.什么是Logback1.1 初识Logbcak 二.Logbcak的结构三.日志的级别四.配置组件详解4.1 logger 日志记录器属性的介绍如何在配置文件里配置 4.2 appender 附加器 配合日志记录器的输出格式4.2.1 控制台附加器4.2.2 文件附加器4.3.3滚动文件附加器 4.3 Filter: 过滤器&am…...

移动安全-certutil

1 需求 需求1&#xff1a;获取应用文件的MD5 CertUtil -hashfile 文件路径 MD5 2 语法 C:\>certutil -?动词:-dump -- 转储配置信息或文件-dumpPFX -- 转储 PFX 结构-asn -- 分析 ASN.1 文件-decodehex -- 解码十六进制编码的…...

【HarmonyOS4.0】第九篇-ArkUI布局容器组件(一)

容器组件指的是它可以包含一个或多个子组件的组件&#xff0c;除了前边介绍过的公共属性外。 一、线性布局容器&#xff08;Row、Column&#xff09; 线性容器类表示按照水平方向或者竖直方向排列子组件的容器&#xff0c;ArkUI开发框架通过 Row 和 Colum 来实现线性布局。 …...

在macos上查看当前进程的栈信息

概述 在调试程序时&#xff0c;如cpu莫名的高或低&#xff0c;一个常用的方式就是打印当前进行的调用栈&#xff0c;然后确认各线程的执行函数是否有异常。 在linux系统中可以使用pstack命令&#xff0c;直接打印各线程的栈信息&#xff0c;可惜在macos上没有该命令。一种解决…...

医院患者满意度调查指标设计

医院患者满意度调查指标的设计是确保调查能够准确反映患者体验和医院服务质量的关键步骤。以下是一些常见的医院患者满意度调查指标&#xff0c;可以根据特定需求和目标进行定制&#xff1a; 整体满意度&#xff1a;通过一个综合评分或问卷问题来评估患者对整体医院体验的满意…...

2023年全国职业院校技能大赛软件测试赛题—单元测试卷④

任务二 单元测试 一、任务要求 题目1&#xff1a;根据下列流程图编写程序实现相应分析处理并显示结果。返回结果“ax&#xff1a;”&#xff08;x为2、3或4&#xff09;&#xff1b;其中变量x、y均须为整型。编写程序代码&#xff0c;使用JUnit框架编写测试类对编写的程序代码…...

Open CV 图像处理基础:(一)Open CV 在windows环境初始化和 Java 动态库加载方式介绍

Open CV 在windows环境初始化和 Java 动态库加载方式介绍 目录 Open CV 在windows环境初始化和 Java 动态库加载方式介绍前言OpenCV安装opencv-4.4.0下载安装 加载opencv-4.4.0.jar包jar包引入mavn-init.cmdjar包装载到本地maven仓库pom.xml加载动态库 加载动态库opencv_java44…...

云联接:揭开SD-WAN神秘面纱,颠覆你对网络的认知!

云联接&#xff08;Cloud Connect&#xff09;源于软件定义广域网&#xff08;SD-WAN&#xff09;。 软件定义广域网由于技术应用性强&#xff0c;近年来从一个由软件定义网络&#xff08;SDN&#xff09;部分衍生的分支概念发展为大规模普适的实践技术&#xff0c;已成为建立…...

拓展操作(四) 使用nginx反向代理jenkins

让清单成为一种习惯 互联网时代的变革,不再是简单的开发部署上线,持续,正确,安全地把事情做好尤其重要;把事情做好的前提是做一个可量化可执行的清单,让工程师就可以操作的清单而不是专家才能操作: 设定检查点 根据节点执行检查程序操作确认或边读边做 二者选其一不要太…...

C语言关于指针函数可变参数的使用方法和打印相应数据

通过使用四个函数来实现 指针函数的可变参数操作&#xff1b; 四个函数分别为&#xff1a; #include <stdarg.h>va_list ap; //初始化 参数列表指针 va_start(ap, count); //将ap指针指向第一个参数COUNT 这个是必须存在的 否则无法定位到后面的参数 va_arg(a…...

centos7下升级openssh9.4p1及openssl1.1.1v版本

背景&#xff1a;客户服务器扫描出一些漏洞&#xff0c;发现和版本有关&#xff0c;漏洞最高的版本是9.3p2&#xff0c;所以我们安装一个openssh9.4p1版本及openssl1.1.1v版本 虽然我们进行了镜像备份&#xff0c;为了安全先安装telnet以防止升级失败无法通过ssh连接服务器 一…...

vue+element弹窗内---下拉框定位问题解决(方法之两种)

问题: 加了 :popper-append-to-body"false" 这个属性也不好用时 可以试试这个 解决方法1️⃣: 第一步: 找到el-select标签添加(popper-class"popperClass")属性-----如下图 第二步:在css中添加如下代码即可 ::v-deep .popperClass{ top:auto !import…...

MATLAB二维与三维绘图实验

本文MATLAB源码&#xff0c;下载后直接打开运行即可[点击跳转下载]-附实验报告https://download.csdn.net/download/Coin_Collecter/88740747 一、实验目的 掌握图形对象属性的基本操作。掌握利用图形对象进行绘图操作的方法。 二、实验内容 利用图形对象绘制曲线&#xff…...

usb个人总结

一、usb工具分析 1、不同的usb抓包工具抓包分析 2、USB抓包分析方式 外接usb分析仪分析 &#xff08;1&#xff09;力科usb分析仪 &#xff08;2&#xff09;HD-USB12 协议分析仪 &#xff08;3&#xff09;沁恒CH552 usb分析仪&#xff0c;软件工具USB2.0 Monitor (4)等等…...

进阶Docker2:数据卷和挂载目录

目录 准备 删除容器 创建并运行一个容器 数据卷&#xff08;Volumes&#xff09; 挂载数据卷 虚拟机端口映射 挂载目录&#xff08;Bind mounts&#xff09; 挂载目录 挂载文件 部署在线项目 docker 在容器中管理数据主要有两种方式&#xff1a; - 数据卷&#xff0…...

SHAP:最受欢迎、最有效的可解释人工智能工具包

在许多情况下&#xff0c;机器学习模型比传统线性模型更受欢迎&#xff0c;因为它们具有更好的预测性能和处理复杂非线性数据的能力。然而&#xff0c;机器学习模型的一个常见问题是它们缺乏可解释性。 例如&#xff0c;集成方法如XGBoost和随机森林将许多个体学习器的结果组合…...

语境化语言表示模型-ELMO、BERT、GPT、XLnet

一.语境化语言表示模型介绍 语境化语言表示模型&#xff08;Contextualized Language Representation Models&#xff09;是一类在自然语言处理领域中取得显著成功的模型&#xff0c;其主要特点是能够根据上下文动态地学习词汇和短语的表示。这些模型利用了上下文信息&#xf…...

和MATLAB相关的设置断点的快捷键

一个朋友在修改错误的时候&#xff0c;有个操作震惊到我了。 他把迭代次数从1000减小到100&#xff0c;就可以快速仿真完。 废话不多说&#xff0c;直接上快捷键。 F12&#xff1a;设置或者清楚断点。 F5&#xff1a;运行 F10和F11都是步进&#xff0c;但是两者有区别。 …...

实人认证(人像三要素)API:加强用户身份验证

前言 在当今数字化时代&#xff0c;随着互联网应用的广泛普及&#xff0c;用户身份验证的重要性日益凸显。实人认证&#xff08;人像三要素&#xff09;API作为一种新型的身份验证方式&#xff0c;凭借其高效、安全和便捷的特性&#xff0c;正在成为加强用户身份验证的强大工具…...

美易官方:一路火到2024!英伟达还在创造历史

一路火到2024&#xff01;英伟达还在创造历史&#xff1a;两周来市值增逾千亿美元 自今年8月以来&#xff0c;英伟达的股价一直处于快速上涨的轨道上。最近两周&#xff0c;英伟达的市值更是增加了超过1000亿美元&#xff0c;这主要得益于其数据中心业务的持续强劲表现和游戏业…...

6个免费/商用图片素材网站

推荐6个免费可商用图片素材网站&#xff0c;收藏走一波~ 1、菜鸟图库 https://www.sucai999.com/pic.html?vNTYwNDUx 我推荐过很多次的设计素材网站&#xff0c;除了设计类素材&#xff0c;还有很多自媒体可以用到的高清图片、背景图、插画、视频、音频素材等等。网站提供的图…...

Java使用IText生产PDF时,中文标点符号出现在行首的问题处理

Java使用IText生成PDF时&#xff0c;中文标点符号出现在行首的问题处理 使用itext 5进行html转成pdf时&#xff0c;标点符号出现在某一行的开头 但这种情况下显然不符合中文书写的规则&#xff0c;主要问题出在itext中的DefaultSplitCharacter类&#xff0c;该方法主要用来判断…...

npx和npm有什么区别,包管理器yarn的使用方法,node的版本管理工具nvm使用方法

文章目录 一、npx介绍及使用1、npx 是什么2、npx 会把远端的包下载到本地吗?3、npx 执行完成之后&#xff0c; 下载的包是否会被删除&#xff1f;4、npx和npm的区别 二、yarn介绍及使用1、Yarn是什么&#xff1f;2、Yarn的常见场景&#xff1a;3、Yarn常用命令 三、nvm介绍及使…...

【网络技术】【Kali Linux】Wireshark嗅探(九)安全HTTP协议(HTTPS协议)

一、实验目的 本次实验是基于之前的实验&#xff1a;Wireshark嗅探&#xff08;七&#xff09;&#xff08;HTTP协议&#xff09;进行的。本次实验使用Wireshark流量分析工具进行网络嗅探&#xff0c;旨在初步了解安全的HTTP协议&#xff08;HTTPS协议&#xff09;的工作原理。…...

POI-tl 知识整理:整理3 -> 动态生成表格

1 表格行循环 &#xff08;1&#xff09;需要渲染的表格的模板 说明&#xff1a;{{goods}} 是个标准的标签&#xff0c;将 {{goods}} 置于循环行的上一行&#xff0c;循环行设置要循环的标签和内容&#xff0c;注意此时的标签应该使用 [] &#xff0c;以此来区别poi-tl的默认标…...

chatgpt和文心一言哪个更好用

ChatGPT和文心一言都是近年来备受关注的人工智能语言模型。它们在智能回复、语言准确性、知识库丰富度等方面都有着较高的表现。然而&#xff0c;它们各自也有自己的特点和优势。在本文中&#xff0c;我们将从这几个方面对这两个模型进行比较&#xff0c;以帮助您更好地了解它们…...

移动端开发进阶之蓝牙通讯(一)

移动端开发进阶之蓝牙通讯&#xff08;一&#xff09; 移动端进阶之蓝牙通讯需要综合考虑蓝牙版本选择、协议栈使用、服务匹配、设备连接、安全性和硬件支持等方面。 一、蓝牙版本选择 根据实际需求和应用场景选择合适的蓝牙版本&#xff1b; 1.0&#xff0c;1M/s。 2.0EDR…...

一个完整的流程表单流转

1.写在前面 一个完整的流程表单审批&#xff08;起表单-->各环节审批-->回退-->重新审批-->完成&#xff09;&#xff0c;前端由Vue2jsElement UI升级为Vue3tsElement Plus&#xff0c;后端流程框架使用Flowable&#xff0c;项目参考了ruoyi-vue-pro(https://gite…...

2024杭州国际智慧城市,人工智能,安防展览会(杭州智博会)

在智能化浪潮的冲击下&#xff0c;我们的生活与环境正在经历一场深刻的变革。这是一场前所未有的技术革命&#xff0c;它以前所未有的速度和广度&#xff0c;改变着我们的生活方式、工作方式、思维方式和社会结构。在这场变革中&#xff0c;有的人选择激流勇进&#xff0c;拥抱…...

编程笔记 html5cssjs 031 HTML视频

编程笔记 html5&css&js 031 HTML视频 一、<video>: 视频元素二、属性三、事件四、嵌入视频页面五、练习小结 视频应用广泛&#xff0c;当前的互联网应用中&#xff0c;视频越来越重要&#xff0c;比如抖音、快手、腾讯视频等应用。 一、<video>: 视频元素 …...