八、Spring Boot 日志详解
目录
一、日志的用途
二、日志使用
2.1 打印日志
2.1.1 在程序中获取日志对象
2.1.2 使用日志对象打印日志
2.2、日志框架介绍
2.2.1 门面模式(外观模式)
2.2.2 门面模式的实现
2.2.3 SLF4J 框架介绍
2.3 日志格式的说明
2.4 日志级别
2.4.1 日志级别的分类
2.4.2 日志级别的使用
2.5 日志配置
2.5.1 配置日志级别
2.5.2 日志持久化
2.5.3 配置日志文件分割
三、 @Slf4j注解
3.1 添加lombok依赖
3.2 输出日志
一、日志的用途
1. 系统监控
监控现在⼏乎是⼀个成熟系统的标配, 我们可以通过日志记录这个系统的运⾏状态,每⼀个方法的响应 时间,响应状态等,对数据进行分析,设置不同的规则,超过阈值时进⾏报警.⽐如统计⽇志中关键字的数量,并在关键字数量达到⼀定条件时报警,这也是⽇志的常⻅需求之⼀。
2. 数据采集
数据采集是⼀个⽐较大的范围,采集的数据可以作⽤在很多⽅⾯,比如数据统计,推荐排序等.
• 数据统计:统计页面的浏览量(PV),访客量(UV),点击量等,根据这些数据进行数据分析,优化公司运营 策略
• 推荐排序: 目前推荐排序应⽤在各个领域,我们经常接触的各行各业很多也都涉及推荐排序,比如购 物,⼴告,新闻等领域.数据采集是推荐排序⼯作中必须做的⼀环,系统通过日志记录⽤户的浏览历史,停留时长等,算法⼈员通过分析这些数据,训练模型,给⽤户做推荐。
3. 日志审计
随着互联网的发展,众多企业的关键业务越来越多的运行于网络之上.网络安全越来越受到大家的关注,系统安全也成为了项目中的⼀个重要环节, 安全审计也是系统中非常重要的部分.国家的政策法规、行业标准等都明确对日志审计提出了要求.通过系统日志分析,可以判断⼀些非法攻击,非法调⽤,以及系统处理过程中的安全隐患.
二、日志使用
2.1 打印日志
2.1.1 在程序中获取日志对象
在程序中获取日志对象需要使用日志工程LoggerFactory,如下代码所示:
private static Logger logger = LoggerFactory.getLogger(LoggerController.class);
注意:Logger对象是属于org.slf4j包下的
2.1.2 使用日志对象打印日志
日志对象的打印方法有很多种,我们可以先使⽤info()方法来输出日志,如下代码所示:
package com.example.demo.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class LoggerController {private static Logger logger = LoggerFactory.getLogger(LoggerController.class);@RequestMapping("/logger")public String logger() {logger.info("------要输出的内容-------");return "打印日志";}
}
打印日志效果展示:
2.2、日志框架介绍
SLF4J不同于其他日志框架,它不是⼀个真正的日志实现,而是⼀个抽象层,对日志框架制定的⼀种规范, 标准,接口.所有SLF4J并不能独立使用,需要和具体的日志框架配合使用.
2.2.1 门面模式(外观模式)
门面模式(FacadePattern)又称为外观模式,提供了⼀个统⼀的接⼝,⽤来访问子系统中的⼀群接口. 其主要特征是定义了⼀个⾼层接口,让子系统更容易使用.
门面模式主要包含2种角色:
外观角色(Facade):也称门面角色,系统对外的统一接口,
子系统角色(SubSystem):可以同时有一个或多个SubSystem.每个SubSytem都不是一个单独的类,而是一个类的集合.SubSystem并不知道Facade的存在,对于SubSystem而言,Facade只是另一个客户端而已(即Facade对SubSystem透明)
举个例子:
比如去医院看病,可能要去挂号,门诊,化验,取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。
2.2.2 门面模式的实现
场景:
回家时,我们会开各个屋的灯离开家时,会关闭各个屋的灯 如果家里设置⼀个总开关,来控制整个屋的灯的打开与关闭就会很方便。
package FacadePattern;public class FacadePatternDemo {public static void main(String[] args) {LightFacafe lightFacafe = new LightFacafe();lightFacafe.lightOn();lightFacafe.lightOff();}
}interface Light {void on();void off();
}/** 灯的门面* */
class LightFacafe {private Light livingRoomLight = new LivingRoomLight();private Light hallLight = new HallLight();private Light dingingLight = new DingLight();public void lightOn() {livingRoomLight.on();hallLight.on();dingingLight.on();}public void lightOff() {livingRoomLight.off();hallLight.off();dingingLight.off();}
}/** 客厅灯* */class LivingRoomLight implements Light {@Overridepublic void on() {System.out.println("打开客厅的灯");}@Overridepublic void off() {System.out.println("关闭客厅的灯");}
}/** 走廊灯* */class HallLight implements Light {@Overridepublic void on() {System.out.println("打开客厅的灯");}@Overridepublic void off() {System.out.println("关闭客厅的灯");}
}/** 餐厅灯* */class DingLight implements Light {@Overridepublic void on() {System.out.println("打开餐厅的灯");}@Overridepublic void off() {System.out.println("关闭餐厅的灯");}
}
门面模式的优点
1、减少了系统的相互依赖.实现了客户端与子系统的耦合关系,这使得子系统的变化不会影响到调用它的客户端;
2、提高了灵活性,简化了客户端对子系统的使用难度,客户端无需关心子系统的具体实现方式, 而只需要和门面对象交互即可.
3、提高了安全性.可以灵活设定访问权限,不在门面对象中开通方法,就无法访问
2.2.3 SLF4J 框架介绍
SLF4J 就是其他日志框架的门面.SLF4J可以理解为是提供日志服务的统一API接口,并不涉及到具体的 日志逻辑实现.
引入日志门面
引入门面日志框架之后,应用程序和日志框架(框架的具体实现)之间有了统一的AP接口(门面日志框架实现),此时应用程序只需要维护一套日志文件配置,且当底层实现框架改变时,也不需要更改应用程序代码.
SLF4J 就是这个日志门面. 总的来说,SLF4J使你的代码独立于任意⼀个特定的日志API,这是⼀个对于开发API的开发者很好的思想.
2.3 日志格式的说明
2.4 日志级别
2.4.1 日志级别的分类
日志的级别从高到低依次为:FATAL、ERROR、WARN、INFO、DEBUG、TRACE
FATAL:致命信息,表示需要立即被处理的系统级错误。
ERROR:错误信息,级别较⾼的错误日志信息,但仍然不影响系统的继续运行。
WARN:警告信息,不影响使用,但需要注意的问题。
INFO:普通信息,用于记录应用程序正常运行时的⼀些信息,例如系统启动完成、请求处理完成等。
DEBUG:调试信息,需要调试时候的关键信息打印。
TRACE:追踪信息,比DEBUG更细粒度的信息事件(除非有特殊用意,否则请使用DEBUG级别替代)
日志级别通常和测试人员的Bug级别没有关系,日志级别是开发人员设置的,用来给开发人员看的.日志级别的正确设置,也与开发人员的工作经验有关.如果开发人员把error级别的日志设置成了info,就很有可能会影响开发人员对项目运行情况的判断.出现error级别的日志信息较多时,可能也没有任何问题,测试的bug级别更多是依据现象和影响范围来判断。
日志级别的顺序:
2.4.2 日志级别的使用
日志级别是开发⼈员自己设置的.开发⼈员根据自己的理解来判断该信息的重要程度
针对这些级别,Logger对象分别提供了对应的方法,来输出日志.
@RestController
public class LoggerController {private static Logger logger = LoggerFactory.getLogger(LoggerController.class);@RequestMapping("/printLog")public String pringtLog() {logger.trace("======trace======");logger.debug("======debug======");logger.info("======info======");logger.warn("======warn======");logger.error("======error======");return "打印不同级别的日志";}
}
SpringBoot默认的日志框架是Logback,Logback没有FATAL级别,它被映射到ERROR
出现fatal日志,表示服务已经出现了某种程度的不可用,需要需要系统管理员紧急介入处理.通常情况下,一个进程生命周期中应该最多只有一次FATAL记录.
观察打印的日志结果:
结果发现,只打印了info,warn和error级别的日志这与日志级别的配置有关,日志的输出级别默认是info级别,所以只会打印大于等于此级别的日志,也就是info,warn和error.
2.5 日志配置
2.5.1 配置日志级别
⽇志级别配置只需要在配置⽂件中设置"logging.level"配置项即可,如下所示例。
Properties配置
logging.level.root=debug
yml配置
logging:level:root=debug:
运行结果:
2.5.2 日志持久化
配置文件名的路径和文件名
Properties配置
logging.file.name=logger/springboot.log
yml配置
logging:level:root=debug:file:name: logger/springboot.log
运行结果显示,日志内容保存在对应的目录下
配置日志文件的保存路径
Properties配置
logging.file.path=D:/temp
yml配置
logging:file:path: C:\logger
运⾏程序,该路径下多出⼀个日志文件:spring.log
注意:
logging.file.name 和 logging.file.path 两个都配置的情况下,只⽣效其⼀,以 logging.file.name 为准
2.5.3 配置日志文件分割
如果我们的日志都放在⼀个⽂件中,随着项⽬的运行,日志⽂件会越来越⼤,需要对日志文件进行分割
配置项 | 说明 | 默认值 |
logging.logback.rollingpolicy.file-name-pattern | ⽇志分割后的⽂件名 格式 | ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz |
logging.logback.rollingpolicy.m ax-file-size | 日志文件超过这个大 小就自动分割 | 10MB |
Properties配置
logging.logback.rollingpolicy.file-name-pattern=${LOG_FILE}.%d{yyyy-MM-dd}.%ilogging.logback.rollingpolicy.max-file-size=1KB
yml配置
logging:file:path: C:/loggerlogback:rollingpolicy:file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%imax-file-size: 1KB
1. ⽇志⽂件超过1KB就分割(设置1KB是为了更好展示.企业开发通常设置为200M,500M等,此处没 有明确标准)
2. 分割后的⽇志⽂件名为:日志名.日期.索引
多次运行程序 查看日志分割效果
2.5.4 配置日志格式
打印日志的格式,也是支持配置的.支持控制台和日志文件分别设置
配置项 | 说明 | 默认值 |
logging.pattern.console | 控制台日志格式 | %clr(%d{S{LOG_DATEFORMAT_PATTERN:-yyyy-MM- dd'T'HH:mm:ss.SSSXXX)H){faint} %clr(${LOG_LEVEL_PATTERN:- %5p}) %clr(${PID:- )(magenta} %clr(---)(faint} %clr([%15.15t]) {faint} %clr(%-40.40logger{39}){cyan}%clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx} |
logging.pattern.file | 日志文件 的日志格 式 | %d{S{LOG_DATEFORMAT_PATTERN:-yyyy-MM- dd'T'HH:mm:Ss.SSSXXX}${LOG_LEVEL_PATTERN:-%5p}${PID:-} ---[%t] %-40.40logger{39] : %m%nS{LOG_EXCEPTION_CONVERSION_WORD:-%wEx} |
配置项说明:
1.%clr(表达式){颜色}设置输入日志的颜色
支持颜色有以下几种:
blue
cyan
faint
green
magenta
red
yellow
2.%d[S[LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.SSSXXX}日期和时间--精确到毫秒
%d日期
${LOG_DATEFORMAT_PATTERN: -yyyy-MM-dd'T'HH: mm: SS.SSSXXX}非空表达式,获取
系统属性LOG_DATEFORMAT_PATTERN,若属性LOG_DATEFORMAT_PATTERN不存在,则使用-yyyy-MM-dd HH:mm:ss.SSSXXX 格式,系统属性可System.getProperty("LOG_DATEFORMAT_PATTERN")获取
3.%5p显示日志级别ERROR,MARN,INFO,DEBUG,TRACE.
4.%t线程名.%c类的全限定名.%Mmethod.%L为行号.%thread线程名称.%m或者%msg显示输出消息.%n换行符
5.%5若字符长度小于5,则右边用空格填充.%-5若字符长度小于5,则左边用空格填充.%.15若
字符长度超过15,截去多余字符.%15.15若字符长度小于15,则右边用空格填充.若字符长度超
过15,截去多余字符
更多说明,参考:https://logback.qos.ch/manual/layouts.html#conversionWord
修改控制台颜色显示
添加 VMoptions-Dspring.output.ansi.enabled=ALWAYS
在控制台中的显示
三 @Slf4j注解
3.1 添加lombok依赖
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope></dependency>
3.2 输出日志
@Slf4j
@RestController
public class LoggerController {// private static Logger logger = LoggerFactory.getLogger(LoggerController.class);@RequestMapping("/printLog")public String pringtLog() {log.info("---info---");return "打印不同级别的日志";}
}
lombok提供的 @Slf4j注解 会帮我们提供⼀个日志对象log,我们可以直接使用
相关文章:
八、Spring Boot 日志详解
目录 一、日志的用途 二、日志使用 2.1 打印日志 2.1.1 在程序中获取日志对象 2.1.2 使用日志对象打印日志 2.2、日志框架介绍 2.2.1 门面模式(外观模式) 2.2.2 门面模式的实现 2.2.3 SLF4J 框架介绍 2.3 日志格式的说明 2.4 日志级别 2.4.1 日志级别的分类 2.4.2…...
vue2:如何动态控制el-form-item之间的行间距
需求 某页面有查看和编辑两种状态: 编辑: 查看: 可以看到,查看时,行间距太大导致页面不紧凑,所以希望缩小查看是的行间距。 行间距设置 行间距通常是通过 CSS 的 margin 或 padding 属性来控制的。在 Element UI 的样式表中,.el-form-item 的下边距(margin-bottom)…...
智能门铃市场:开启智能家居新时代
在科技日新月异的今天,智能家居产品正以前所未有的速度融入我们的生活,而智能门铃作为其中的重要一员,不仅为我们的家居生活带来了极大的便利,更在安全方面提供了坚实的保障。它就像一位忠诚的守门人,无论白天黑夜&…...
C基础寒假练习(6)
一、终端输入行数,打印倒金字塔 #include <stdio.h> int main() {int rows;printf("请输入倒金字塔的行数: ");scanf("%d", &rows);for (int i rows; i > 0; i--) {// 打印空格for (int j 0; j < rows - i; j) {printf(&qu…...
【深度学习】基于MXNet的多层感知机的实现
多层感知机 结构组成 大致由三层组成:输入层-隐藏层-输出层,其中隐藏层大于等于一层 其中,隐藏层和输出层都是全连接 隐藏层的层数和神经元个数也是超参数 多层隐藏层,在本质上仍等价于单层神经网络(可从输出方程…...
Mac 终端命令大全
—目录操作— ꔷ mkdir 创建一个目录 mkdir dirname ꔷ rmdir 删除一个目录 rmdir dirname ꔷ mvdir 移动或重命名一个目录 mvdir dir1 dir2 ꔷ cd 改变当前目录 cd dirname ꔷ pwd 显示当前目录的路径名 pwd ꔷ ls 显示当前目录的内容 ls -la ꔷ dircmp 比较两个目录的内容 di…...
【蓝桥杯嵌入式】2_LED
1、电路图 74HC573是八位锁存器,当控制端LE脚为高电平时,芯片“导通”,LE为低电平时芯片“截止”即将输出状态“锁存”,led此时不会改变状态,所以可通过led对应的八个引脚的电平来控制led的状态,原理图分析…...
微信小程序~电器维修系统小程序
博主介绍:✌程序猿徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
链式结构二叉树(递归暴力美学)
文章目录 1. 链式结构二叉树1.1 二叉树创建 2. 前中后序遍历2.1 遍历规则2.2 代码实现图文理解 3. 结点个数以及高度等二叉树结点个数正确做法: 4. 层序遍历5. 判断是否完全二叉树 1. 链式结构二叉树 完成了顺序结构二叉树的代码实现,可以知道其底层结构…...
gc buffer busy acquire导致的重大数据库性能故障
📢📢📢📣📣📣 作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验 Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯…...
Unity中Spine骨骼动画完全指南:从API详解到避坑实战
Unity中Spine骨骼动画完全指南:从API详解到避坑实战 一、为什么要选择Spine? Spine作为专业的2D骨骼动画工具,相比传统帧动画可节省90%资源量。在Unity中的典型应用场景包括: 角色换装系统(通过插槽替换部件…...
面经-C语言——堆和栈的区别,引用和指针区别,Linux的常用指令,RS232和RS485,TCP连接建立与断开
面经-C语言——堆和栈的区别,引用和指针区别,Linux的常用指令,RS232和RS485,TCP连接建立与断开 堆(Heap)和栈(Stack)的详细比较引用和指针区别对比表:Linux的常用指令RS232和RS485的详细比较:TCP连接建立与断开三次握手࿰…...
(2024|Nature Medicine,生物医学 AI,BiomedGPT)面向多种生物医学任务的通用视觉-语言基础模型
BiomedGPT: A generalist vision–language foundation model for diverse biomedical tasks 目录 1. 摘要 2. 引言 3. 相关研究 3.1 基础模型与通用生物医学 AI 3.2 生物医学 AI 的局限性 3.3 BiomedGPT 的创新点 4. 方法 4.1 架构及表示 4.1.1 模型架构选择 4.1.2 …...
python代码
python\main_script.py from multiprocessing import Process import subprocessdef call_script(args):# 创建一个新的进程来运行script_to_call.pyprocess Process(targetrun_script, args(args[0], args[1]))process.start()process2 Process(targetrun_script, args(arg…...
mongodb 使用内存过大分析
ps aux 内存使用 ps aux|head -1;ps aux|grep -v PID|sort -rn -k 4|head -10swap 使用 for i in $(ls /proc | grep "^[0-9]" | awk $0>100); do awk /Swap:/{aa$2}END{print "$i",a/1024"M"} /proc/$i/smaps;done| sort -k2nr | headmon…...
服务器虚拟化技术深度解析:原理、实践与未来趋势
文章目录 引言:数字化转型的核心引擎第一章 服务器虚拟化技术演进史1.1 虚拟化技术发展脉络1.2 虚拟化技术演进图谱 第二章 虚拟化核心技术解析2.1 Hypervisor架构类型2.1.1 Type 1 裸金属架构2.1.2 Type 2 宿主型架构 2.2 虚拟化实现方式对比2.3 关键技术创新2.3.1…...
C语言常见概念
目录 第一个C语言程序 main函数 写法: printf和库函数 printf()函数 库函数 关键字 字符和ASCII码表 字符串和\0 转义字符 语句 注释 注释的两种形式 第一个C语言程序 #include<stdio.h>//第一个c语言程序 int main() {printf("Hello World…...
sql字符串函数及字符拼接函数
concat(str1,str2)函数:拼接字符串 UPPER(str):字符串变成大写 LOWER(str):字符串变小写 LENGTH(str):获取字符串的长度 left(str,len):获取字符串左边len个字符 right(str,len):获取字符串右边len个字符 s…...
Qt的QTableWidget类的声明定义和使用
QTableWidget类的声明定义 QTableWidget 是 Qt 框架中的一个类,它继承自 QAbstractItemView 并提供了用于显示和操作二维表格数据的接口。这个类不是由用户直接声明的,而是由 Qt 库提供的。你可以在你的 Qt 应用程序中通过包含相应的头文件来使用它。 …...
【kafka实战】06 kafkaTemplate java代码使用示例
在 Spring Boot 中使用 KafkaTemplate 可以方便地向 Kafka 发送消息。下面为你详细介绍使用步骤和示例代码。 1. 创建 Spring Boot 项目 你可以使用 Spring Initializr(https://start.spring.io/ )来创建一个新的 Spring Boot 项目,添加以下…...
使用C#开发一款通用数据库管理工具
由于经常使用各种数据库,笔者自己动手丰衣足食,使用C#开发了一款通用数据库管理工具,支持Mysql、Oracle、Sqlite、SQL Server等数据库的表、视图、存储过程、函数管理功能,并支持导入导出、数据字典生成、拖拽式跨机器跨库数据一键…...
90.子集||
要求所有可能的子集,不能重复,因此对于相同的数字,要考虑去重,去重的方式就是通过排序,排序后相同的数字相邻,这样进行实现迭代时,若没有选择上一个数,,其当前数字与上一…...
windows phpstudy python cgi配置
修改apache配置文件:httpd.conf 搜索’Define SRVROOT’, 查看cgi根目录,python脚本需要放在该 Define SRVROOT "D:/Program/phpstudy_pro/Extensions/Apache2.4.39解决中文乱码 文件最后添加AddDefaultCharset gbk 重启apache python脚本: #!py…...
Java 大数据与区块链的融合:数据可信共享与溯源(45)
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
Axure PR 9 动效 设计交互
大家好,我是大明同学。 这期内容,我们来用Axure制作一组动效。 动效 创建动效元件 1.打开一个新的 RP 文件并在画布上打开 Page 1。 2.选中画布,将画布填充颜色设置为蓝色(#0052D9)。 3.在元件库中拖出一个圆形元件,选中矩形元件&…...
element-plus+vue3前端如何根据name进行搜索查到符合条件的数据
界面如图,下面的区域是接口给的所有的,希望前端根据输入的内容自己去匹配。 我是使用的element-plusvue3ts的写法。 <el-input v-model"filters.region" placeholder"输入区域搜索" keyup"filterRegion(filters.region)&q…...
hot100-day1
1. 两数之和 - 力扣(LeetCode) class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int,int> map1;for(int i0;i<nums.size();i) map1[nums[i]] i;for(int i0;i<nums.size();i){…...
webrtc编译需要常用环境变量以及相关名词解释
set vs2022_installD:\\vs2022 set GYP_MSVS_OVERRIDE_PATHD:\\vs2022 set GYP_GENERATORSmsvs-ninja,ninja set WINDOWSSDKDIRD:\\Windows Kits\10 set DEPOT_TOOLS_WIN_TOOLCHAIN0 set GYP_MSVS_VERSION2022 这些环境变量是为了编译 WebRTC 时让 GYP/Depot Tools 正确找到 V…...
PostgreSQL函数自动Commit/Rollback所带来的问题
一、综述 今天在PostgreSQL遇到一个奇怪的现象,简而言之,是想用函数(存储过程)实现插入记录,整个过程没报错但事后却没找到记录!忙活半天,才发现原因是PostgreSQL函数(存储过程&…...
开源项目介绍-词云生成
开源词云项目是一个利用开源技术生成和展示词云的工具或框架,广泛应用于文本分析、数据可视化等领域。以下是几个与开源词云相关的项目及其特点: Stylecloud Stylecloud 是一个由 Maximilianinir 创建和维护的开源项目,旨在通过扩展 wordclou…...
VSCode设置——通过ctrl+鼠标滚动改变字体大小(新版本的vs)
"editor.mouseWheelZoom": true 第一步: 第二步:...
多种蝴蝶识别分割数据集labelme格式784张9类别
数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数):784 标注数量(json文件个数):784 标注类别数:9 标注类别名称:["Monarch","Zebra Longwing"…...
DeepSeek R1本地化部署 Ollama + Chatbox 打造最强 AI 工具
🌈 个人主页:Zfox_ 🔥 系列专栏:Linux 目录 一:🔥 Ollama 🦋 下载 Ollama🦋 选择模型🦋 运行模型🦋 使用 && 测试 二:🔥 Chat…...
SqlSugar简单使用之Nuget包封装-Easy.SqlSugar.Core
SqlSugar官方文档 Nuget包开源地址 Nuget包是为了简化SqlSugar的使用步骤,增加一些基础的使用封装 引入分为两个版本,一个Ioc模式,另一个是注入模式,如果不想影响原本的仓储代码推荐使用Ioc模式,两者区别不到,方法通…...
论文解读 | NeurIPS'24 Spotlight ChronoMagic-Bench 评估文本到视频生成的质变幅度评估基准...
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 点击 阅读原文 观看作者讲解回放! 作者简介 袁盛海,北京大学硕士一年级学生 内容简介 本文提出了一种新颖的文本到视频(T2V)生成基准ChronoMagic-Bench࿰…...
12.1 LangChain数据处理流Data Connection深度解析:构建高效数据管道的五大核心组件
LangChain数据处理流Data Connection深度解析:构建高效数据管道的五大核心组件 一、Data Connection模块的战略定位 LangChain的Data Connection模块是大模型应用的数据中枢,其核心价值在于将非结构化数据转化为大模型可理解的语义知识。传统数据处理的三大痛点在此得到完美…...
文件基础IO
理解"文件" 1-1 狭义理解 文件在磁盘里磁盘是永久性存储介质,因此文件在磁盘上的存储是永久性的磁盘是外设(即是输出设备也是输入设备)磁盘上的文件 本质是对文件的所有操作,都是对外设的输入和输出简称IO 1-2 广义理…...
ASP.NET Core筛选器Filter
目录 什么是Filter? Exception Filter 实现 注意 ActionFilter 注意 案例:自动启用事务的筛选器 事务的使用 TransactionScopeFilter的使用 什么是Filter? 切面编程机制,在ASP.NET Core特定的位置执行我们自定义的代码。…...
Java 中的 Spring 框架,以及 Spring Boot 和 Spring Cloud 的区别?
Spring框架是一个开源的Java平台,主要用于简化企业级应用程序的开发。 它通过提供一系列的功能模块,帮助开发者解决常见的编程难题,从而提高开发效率和代码质量。 Spring框架的核心思想是“控制反转”(IoC)和“面向切…...
Rplayer:手机上的本地音乐播放智能之选
在众多本地音乐播放器中,Rplayer凭借其卓越的功能脱颖而出。它不仅能够精准识别本地下载的音乐文件,更以其智能化的设计为用户带来极致的便捷体验。 Rplayer的真正亮点在于其强大的自动扫描功能。与市面上其他播放器不同,Rplayer无需用户手动…...
vue2-插槽slot
文章目录 vue2-插槽slot1. 什么是slot2. slot分类2.1 默认插槽2.2 具名插槽2.3 作用域插槽 vue2-插槽slot 1. 什么是slot 在vue中,slot翻译为插槽,简单点说,就是在子组件内放置一个插槽,等待父组件在使用子组件的时候决定放什么…...
二级C语言题解:整数序列奇偶个数、拼接数字字符、数组取偶数并加小数点
目录 一、程序填空📝 --- 整数序列奇偶个数 题目📃 分析🧐 二、程序修改🛠️ --- 拼接数字字符 题目📃 分析🧐 三、程序设计 💻 --- 数组取偶数并加小数点 题目📃 分析&…...
VUE之组件通信(三)
1、$refs与$parent 1)概述: $refs用于:父——>子。$parent用于:子——>父。 2)原理如下: 属性说明$refs值为对象,包含所有被ref属性标识的DOM元素或组件实例。$parent值为对象&#x…...
Airflow:深入理解Apache Airflow Task
Apache Airflow是一个开源工作流管理平台,支持以编程方式编写、调度和监控工作流。由于其灵活性、可扩展性和强大的社区支持,它已迅速成为编排复杂数据管道的首选工具。在这篇博文中,我们将深入研究Apache Airflow 中的任务概念,探…...
【号码分离】从Excel表格、文本、word文档混乱文字中提取分离11位手机号出来,基于WPF的实现方案
应用场景 在市场调研过程中,可能会收集到大量的 Excel 表格、文本报告或 Word 文档,其中包含客户的联系方式。通过提取手机号,可以方便后续的市场推广和客户跟进。 当从不同渠道收集到的数据中包含混乱的文字信息时,需要从中提取…...
【分布式架构理论2】分布式架构要处理的问题及解决方案
文章目录 1. 应用服务拆分2. 分布式调用3. 分布式协同4. 分布式计算5. 分布式存储6. 分布式资源管理与调度7. 高性能与可用性优化8. 指标与监控 将分布式架构需要解决的问题按照顺序列举为如下几步 问题分类具体内容应用服务拆分分布式是用分散的服务和资源代替集中的服务和资…...
WPS计算机二级•幻灯片的输出、打印与分享
听说这是目录哦 打印界面讲解⭐所有页面 一键添加公司LOGO🌟将多张幻灯片 打印在一张纸🌠将PPT内容 以讲义形式打印出来☄️打印 黑白色的幻灯片🪐协作编辑模式🌈将PPT输出为图片💖能量站😚 打印界面讲解⭐…...
Java数据结构与算法之“树”
目录 一、什么是树 编辑 二、树的相关组成 1. 常用名词 2.需要了解的名词 三、树的分类 (一)初级树 1.普通树 2.二叉树 (二)中级树 1.哈夫曼树HuffmanTree 2.二叉搜索树BST 3.平衡二叉树AVL (三&#x…...
嵌入式八股文面试题(一)C语言部分
1. 变量/函数的声明和定义的区别? (1)变量 定义不仅告知编译器变量的类型和名字,还会分配内存空间。 int x 10; // 定义并初始化x int x; //同样是定义 声明只是告诉编译器变量的名字和类型,但并不为它分配内存空间…...
FPGA的IP核接口引脚含义-快解
疑问 手册繁琐,怎样快速了解IP核各输入输出接口引脚的含义。 答疑 不慌不慌,手册确实比较详细但繁琐,如何快速知晓该部分信息,涛tao道长给你们说,简单得很,一般新入门的道友有所不知,往往后面…...