Logback框架基本认识
文章目录
- 一.什么是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:获取应用文件的MD5 CertUtil -hashfile 文件路径 MD5 2 语法 C:\>certutil -?动词:-dump -- 转储配置信息或文件-dumpPFX -- 转储 PFX 结构-asn -- 分析 ASN.1 文件-decodehex -- 解码十六进制编码的…...

【HarmonyOS4.0】第九篇-ArkUI布局容器组件(一)
容器组件指的是它可以包含一个或多个子组件的组件,除了前边介绍过的公共属性外。 一、线性布局容器(Row、Column) 线性容器类表示按照水平方向或者竖直方向排列子组件的容器,ArkUI开发框架通过 Row 和 Colum 来实现线性布局。 …...

在macos上查看当前进程的栈信息
概述 在调试程序时,如cpu莫名的高或低,一个常用的方式就是打印当前进行的调用栈,然后确认各线程的执行函数是否有异常。 在linux系统中可以使用pstack命令,直接打印各线程的栈信息,可惜在macos上没有该命令。一种解决…...
医院患者满意度调查指标设计
医院患者满意度调查指标的设计是确保调查能够准确反映患者体验和医院服务质量的关键步骤。以下是一些常见的医院患者满意度调查指标,可以根据特定需求和目标进行定制: 整体满意度:通过一个综合评分或问卷问题来评估患者对整体医院体验的满意…...

2023年全国职业院校技能大赛软件测试赛题—单元测试卷④
任务二 单元测试 一、任务要求 题目1:根据下列流程图编写程序实现相应分析处理并显示结果。返回结果“ax:”(x为2、3或4);其中变量x、y均须为整型。编写程序代码,使用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神秘面纱,颠覆你对网络的认知!
云联接(Cloud Connect)源于软件定义广域网(SD-WAN)。 软件定义广域网由于技术应用性强,近年来从一个由软件定义网络(SDN)部分衍生的分支概念发展为大规模普适的实践技术,已成为建立…...
拓展操作(四) 使用nginx反向代理jenkins
让清单成为一种习惯 互联网时代的变革,不再是简单的开发部署上线,持续,正确,安全地把事情做好尤其重要;把事情做好的前提是做一个可量化可执行的清单,让工程师就可以操作的清单而不是专家才能操作: 设定检查点 根据节点执行检查程序操作确认或边读边做 二者选其一不要太…...

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

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

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

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

usb个人总结
一、usb工具分析 1、不同的usb抓包工具抓包分析 2、USB抓包分析方式 外接usb分析仪分析 (1)力科usb分析仪 (2)HD-USB12 协议分析仪 (3)沁恒CH552 usb分析仪,软件工具USB2.0 Monitor (4)等等…...

进阶Docker2:数据卷和挂载目录
目录 准备 删除容器 创建并运行一个容器 数据卷(Volumes) 挂载数据卷 虚拟机端口映射 挂载目录(Bind mounts) 挂载目录 挂载文件 部署在线项目 docker 在容器中管理数据主要有两种方式: - 数据卷࿰…...

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

语境化语言表示模型-ELMO、BERT、GPT、XLnet
一.语境化语言表示模型介绍 语境化语言表示模型(Contextualized Language Representation Models)是一类在自然语言处理领域中取得显著成功的模型,其主要特点是能够根据上下文动态地学习词汇和短语的表示。这些模型利用了上下文信息…...
和MATLAB相关的设置断点的快捷键
一个朋友在修改错误的时候,有个操作震惊到我了。 他把迭代次数从1000减小到100,就可以快速仿真完。 废话不多说,直接上快捷键。 F12:设置或者清楚断点。 F5:运行 F10和F11都是步进,但是两者有区别。 …...

实人认证(人像三要素)API:加强用户身份验证
前言 在当今数字化时代,随着互联网应用的广泛普及,用户身份验证的重要性日益凸显。实人认证(人像三要素)API作为一种新型的身份验证方式,凭借其高效、安全和便捷的特性,正在成为加强用户身份验证的强大工具…...
美易官方:一路火到2024!英伟达还在创造历史
一路火到2024!英伟达还在创造历史:两周来市值增逾千亿美元 自今年8月以来,英伟达的股价一直处于快速上涨的轨道上。最近两周,英伟达的市值更是增加了超过1000亿美元,这主要得益于其数据中心业务的持续强劲表现和游戏业…...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...