Java - SpringBoot之logback设置日期分割并设置指定时间自动清除,Linux启动运行

一、SpringBoot之logback-spring.xml配置

在Spring Boot中,要设置日志按照日期进行分割输出,并设置日志文件的大小自动清除,可以使用logback日志框架的配置

1、创建文件

在项目的resources目录下,创建logback-spring.xml文件

2、基本格式

logback-spring.xml文件的最外层标签为<configuration/>

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
....
<conversionRule />
<property />
<appender />
.......
</configuration>

3、引入色彩依赖

<!-- 彩色日志依赖的渲染类 --><conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/><conversionRule conversionWord="wex"converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/><conversionRule conversionWord="wEx"converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>

4、设置属性参数

<!-- 项目配置文件 --><property resource="application.yml"/><!-- 日志存放路径 --><property name="log.path" value="logs"/><!-- 日志输出格式 --><property name="log.pattern"value="%clr(%d{${yyyy-MM-dd HH:mm:ss.SSS}}){faint} {magenta} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%20.20t]){faint} %clr(%-40.40logger{39}){cyan} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/><property name="file.log.pattern"value="%d{${yyyy-MM-dd HH:mm:ss.SSS}}  ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%15.15t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>

5、控制台输出appender

<!-- 控制台输出 --><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${log.pattern}</pattern><!-- 记录日志的编码:此处设置字符集 - --><charset>UTF-8</charset></encoder></appender>

6、Info类型日志文件储存

通过RollingFileAppender实现,输出到硬盘的文件进行动态滚动,通过LevelFilter过虑其他类型的日志,保证INFO级别日志才能写道文件中;

<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/info.log</file><!-- 循环政策:基于时间创建日志文件 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 日志文件名格式 --><fileNamePattern>${log.path}/info/%d{yyyy-MM-dd}-%i.log</fileNamePattern><!-- 每个文件最大值 --><maxFileSize>10MB</maxFileSize><!-- 最多保存30天的日志 --><maxHistory>15</maxHistory><!-- 最大限制 --><totalSizeCap>20GB</totalSizeCap></rollingPolicy><encoder><pattern>${file.log.pattern}</pattern><!-- 记录日志的编码:此处设置字符集 - --><charset>UTF-8</charset></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 过滤的级别 --><level>INFO</level><!-- 匹配时的操作:接收(记录) --><onMatch>ACCEPT</onMatch><!-- 不匹配时的操作:拒绝(不记录) --><onMismatch>DENY</onMismatch></filter></appender>

7、error类型日志文件储存

通过RollingFileAppender实现,输出到硬盘的文件进行动态滚动,通过LevelFilter过虑其他类型的日志,保证ERROR级别日志才能写道文件中;

<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/error.log</file><!-- 循环政策:基于时间创建日志文件 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 日志文件名格式 --><fileNamePattern>${log.path}/error/%d{yyyy-MM-dd}-%i.log</fileNamePattern><!-- 每个文件最大值 --><maxFileSize>10MB</maxFileSize><!-- 最多保存30天的日志 --><maxHistory>15</maxHistory><!-- 最大限制 --><totalSizeCap>20GB</totalSizeCap></rollingPolicy><encoder><pattern>${file.log.pattern}</pattern><!-- 记录日志的编码:此处设置字符集 - --><charset>UTF-8</charset></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 过滤的级别 --><level>ERROR</level><!-- 匹配时的操作:接收(记录) --><onMatch>ACCEPT</onMatch><!-- 不匹配时的操作:拒绝(不记录) --><onMismatch>DENY</onMismatch></filter></appender>

8、全局日志文件储存

可以为error、info级别的日志单独配置不同的文件进行储存,但是在查看实时日志时不直观,因为不能同时查看error、info、debug等级别的日志,为了解决这个问题,引入一个全局日志文件来记录所有级别的日志,并且不做任何的储存,用于排查问题时,进行实时的显示。文件只会有一个,并且大小不超过5MB,记录的是最新的日志信息。

<appender name="file_application" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/application.log</file><rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"><fileNamePattern>${log.path}/application/application.%i.log</fileNamePattern><minIndex>1</minIndex><maxIndex>1</maxIndex></rollingPolicy><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><maxFileSize>5MB</maxFileSize></triggeringPolicy><encoder><pattern>${file.log.pattern}</pattern><!-- 记录日志的编码:此处设置字符集 - --><charset>UTF-8</charset></encoder></appender>

9、配置logger

<!-- 整个模块日志级别控制,根据实际包路径进行配置  --><logger name="com.org.sys" level="debug"/><root level="info"><appender-ref ref="console"/></root><!--系统操作日志--><root level="info"><appender-ref ref="file_application"/><appender-ref ref="file_info"/><appender-ref ref="file_error"/></root>

10、完整配置文件

将此配置文件放置在src/main/resources目录下,并确保它命名为logback-spring.xml,Spring Boot会自动加载它。这样就设置了日志文件的大小限制,当单个文件达到指定大小时,会自动滚动,并且旧的日志文件会被自动清理

<configuration scan="true" scanPeriod="60 seconds" debug="false"><!-- 彩色日志依赖的渲染类 --><conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/><conversionRule conversionWord="wex"converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/><conversionRule conversionWord="wEx"converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/><property resource="application.yml"/><!-- 日志存放路径 --><property name="log.path" value="/path/to/your/logs"/><!-- 日志输出格式 --><property name="log.pattern"value="%clr(%d{${yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr([%X{mdcTraceId},%X{mdcTraceNum}]){magenta} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%20.20t]){faint} %clr(%-40.40logger{39}){cyan} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/><property name="file.log.pattern"value="%d{${yyyy-MM-dd HH:mm:ss.SSS}} [%X{mdcTraceId},%X{mdcTraceNum}] ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%15.15t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/><!--    <springProperty scope="context" name="logFileName" source="spring.application.name" defaultValue="currentLog"/>--><!-- 控制台输出 --><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${log.pattern}</pattern><!-- 记录日志的编码:此处设置字符集 - --><charset>UTF-8</charset></encoder></appender><!-- 全局日志输出 --><appender name="file_application" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/application.log</file><rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"><fileNamePattern>${log.path}/application/application.%i.log</fileNamePattern><minIndex>1</minIndex><maxIndex>1</maxIndex></rollingPolicy><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><maxFileSize>5MB</maxFileSize></triggeringPolicy><encoder><pattern>${file.log.pattern}</pattern><!-- 记录日志的编码:此处设置字符集 - --><charset>UTF-8</charset></encoder></appender><!-- 系统日志输出 --><appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/info.log</file><!-- 循环政策:基于时间创建日志文件 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 日志文件名格式 --><fileNamePattern>${log.path}/info/%d{yyyy-MM-dd}-%i.log</fileNamePattern><!-- 每个文件最大值 --><maxFileSize>10MB</maxFileSize><!-- 最多保存30天的日志 --><maxHistory>15</maxHistory><!-- 最大限制 --><totalSizeCap>20GB</totalSizeCap></rollingPolicy><encoder><pattern>${file.log.pattern}</pattern><!-- 记录日志的编码:此处设置字符集 - --><charset>UTF-8</charset></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 过滤的级别 --><level>INFO</level><!-- 匹配时的操作:接收(记录) --><onMatch>ACCEPT</onMatch><!-- 不匹配时的操作:拒绝(不记录) --><onMismatch>DENY</onMismatch></filter></appender><!-- 错误日志输出 --><appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/error.log</file><!-- 循环政策:基于时间创建日志文件 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 日志文件名格式 --><fileNamePattern>${log.path}/error/%d{yyyy-MM-dd}-%i.log</fileNamePattern><!-- 每个文件最大值 --><maxFileSize>10MB</maxFileSize><!-- 最多保存30天的日志 --><maxHistory>15</maxHistory><!-- 最大限制 --><totalSizeCap>20GB</totalSizeCap></rollingPolicy><encoder><pattern>${file.log.pattern}</pattern><!-- 记录日志的编码:此处设置字符集 - --><charset>UTF-8</charset></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 过滤的级别 --><level>ERROR</level><!-- 匹配时的操作:接收(记录) --><onMatch>ACCEPT</onMatch><!-- 不匹配时的操作:拒绝(不记录) --><onMismatch>DENY</onMismatch></filter></appender><!-- 系统模块日志级别控制  --><logger name="com.org.sys" level="debug"/><!-- Spring日志级别控制  --><logger name="org.springframework" level="warn"/><logger name="com.zaxxer.hikari" level="warn"/><logger name="io.lettuce.core" level="warn"/><logger name="io.seata.core" level="warn"/><logger name="com.netflix.loadbalancer" level="warn"/><root level="info"><appender-ref ref="console"/></root><!--系统操作日志--><root level="info"><appender-ref ref="file_application"/><appender-ref ref="file_info"/><appender-ref ref="file_error"/></root>
</configuration>
  • <maxFileSize> 设置单个日志文件的最大大小。

  • <maxHistory> 设置日志文件保留的最大天数或者总文件数。

  • <fileNamePattern> 定义了日志文件的命名模式。

  • <cleanHistoryOnStart> 在应用启动时清除旧的日志文件

  • %i 占位符:表示文件序号,当文件大小超过指定的 maxFileSize 时,会生成新的文件并增加序号。在 FileNamePattern 中添加 %i 占位符,以便 Logback 可以正确地生成滚动日志文件。

二、Linux部署SpringBoot项目

当我们的电脑装好JAVA开发环境后,即JDK(不管是Linux系统下还是Windows下安装了JDK),那么我们可以将项目打包成JAR包,并可以对JAR包进行运行,可以查看实时的日志信息,可以保存日志文件。下面针对多种情况,描述如何在JDK环境下,使用JAVA命令运行JAR包及运行日志输出。

如:将JAVA项目打包成的JAR包名称为Demo.jar,

1、运行方式1:直接运行

java -jar Demo.jar

按下ctrl+C ,会关闭当前ssh或者直接关闭窗口,当前程序都会退出

2、运行方式2:程序可以在后台执行

java -jar Demo.jar &

在命令的结尾添加 “&” ,&表示该程序可以在后台执行,但是在当窗口关闭时,程序也会中止运行。

注:方式1、2都实用与Windows和Linux系统下

3、运行方式3:Linux系统下的后台运行并输出日志文件

nohup java -jar Demo.jar &

命令最前面个nohup关键字,这样程序就会不挂断运行命令, 当ssh终端关闭时,程序仍然在运行,当前程序的日志会被写入到当前目录的nohup.out文件中

4、运行方式4:Linux系统下的后台运行并输出指定日志文件

nohup java -jar Demo.jar > log.out &

当前程序的日志会被写入到当前目录的log.out文件中,你也可以改目录在log.out文件名中加上路径。

以上是我们常用的使用JAVA命名运行JAR包及日志输出,以下做额外情况的补充:

5、额外补充:以下还有一些其他情况下的命令,自行根据需求选择

如果不想写日志,可以将日志重定向到 /dev/null 中,/dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失

nohup java -jar Demo.jar > /dev/null &

标准输出就会不再存在,没有任何地方能够找到输出的内容

nohup java -jar Demo.jar >/dev/null 2>log.error &

只输出错误信息到日志文件,标准输出不写入日志文件,直接丢弃

nohup java -jar Demo.jar >/dev/null 2>&1 &

标准输出(stdout)重定向到/dev/null中(丢弃标准输出),然后标准错误输出(stderror)由于重用了标准输出的描述符,所以标准错误输出也被定向到了/dev/null中,错误输出同样也被丢弃了

nohup java -jar Demo.jar >log.out 2>&1 &

标准输出重定向到log.out中,然后错误输出由于重用了标准输出的描述符,所以错误输出也被定向到了log.out中

但是不管那种情况,如果日志输出,日志文件都会增加很快,造成单个文件很大。所以需要拆分文件

(1)定时作业,每天将日志文件复制一份,然后将当前的日志文件清空。

(2)借助 cronolog来分隔日志

nohup java -jar Demo.jar | /usr/local/cronolog/sbin/cronolog logs/console-%Y-%m-%d.out &

这样每天会产生一个console开头的日志文件

三、示例

1、SpringBoot之logback.xml日志配置文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration><!-- 日志存放路径 --><property name="log.path" value="/path/to/your/logs" /><!-- 日志输出格式 --><property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" /><!-- 控制台输出 --><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${log.pattern}</pattern></encoder></appender><!-- 系统日志输出 --><appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/sys-info.log</file><!-- 循环政策:基于时间创建日志文件 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 日志文件的命名模式在 FileNamePattern 中添加 %i 占位符,以便 Logback 可以正确地生成滚动日志文件%i 占位符:表示文件序号,当文件大小超过指定的 maxFileSize 时,会生成新的文件并增加序号--><fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- 日志最大的历史 60天 --><maxHistory>60</maxHistory></rollingPolicy><encoder><pattern>${log.pattern}</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 过滤的级别 --><level>INFO</level><!-- 匹配时的操作:接收(记录) --><onMatch>ACCEPT</onMatch><!-- 不匹配时的操作:拒绝(不记录) --><onMismatch>DENY</onMismatch></filter></appender><appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/sys-error.log</file><!-- 循环政策:基于时间创建日志文件 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 日志文件的命名模式在 FileNamePattern 中添加 %i 占位符,以便 Logback 可以正确地生成滚动日志文件%i 占位符:表示文件序号,当文件大小超过指定的 maxFileSize 时,会生成新的文件并增加序号--><fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- 日志最大的历史 60天 --><maxHistory>60</maxHistory></rollingPolicy><encoder><pattern>${log.pattern}</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 过滤的级别 --><level>ERROR</level><!-- 匹配时的操作:接收(记录) --><onMatch>ACCEPT</onMatch><!-- 不匹配时的操作:拒绝(不记录) --><onMismatch>DENY</onMismatch></filter></appender><!-- 用户访问日志输出  --><appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/sys-user.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 按天回滚 daily --><fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- 日志最大的历史 60天 --><maxHistory>60</maxHistory></rollingPolicy><encoder><pattern>${log.pattern}</pattern></encoder></appender><!-- 系统模块日志级别控制 设置捕获指定包下的日志信息 --><logger name="com.xmmc" level="info" /><!-- Spring日志级别控制  --><logger name="org.springframework" level="warn" /><root level="info"><appender-ref ref="console" /></root><!--系统操作日志--><root level="info"><appender-ref ref="file_info" /><appender-ref ref="file_error" /></root><!--系统用户操作日志--><logger name="sys-user" level="info"><appender-ref ref="sys-user"/></logger>
</configuration> 

2、Linux部署脚本

#!/bin/bash# 定义Spring Boot项目的jar文件名
JAR_FILE=your-spring-boot-project.jar# 定义日志文件夹路径
LOG_DIR=/path/to/your/logs# 确保日志文件夹存在
mkdir -p $LOG_DIR# 使用nohup启动Spring Boot项目,并指定日志文件
nohup java -jar $JAR_FILE > "${LOG_DIR}/spring-boot.log" 2>&1 &echo "Spring Boot is running in the background with PID: $!"

通过如下命令启动jar

nohup java -jar demo.jar> spring-boot.log 2>&1 &

启动以后会在/home/xmmc/logs下面按照日期输出日志,并超过60天的自动清除

启动以后会在jar旁边生成一个spring-boot.log日志文件,会累计输出所有的日志信息,这里可以通过

rm -rf spring-boot.log

删除日志即可,因为日志已经记录到对应的日志文件里面了,这里删除以后也不会生成对应的日志文件

如下可生成如下日志文件

遇到问题&FAQ

可能会遇到如下报错:

Logging system failed to initialize using configuration from 'null' java.lang.IllegalStateException: Logback configuration error detected: ERROR in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@18ca3c62 - Missing integer token, that is %i, in FileNamePattern [logs/sys-info.%d{yyyy-MM-dd}.log]

问题分析

根据错误信息,Logback 配置文件中存在配置错误,具体错误为:

错误信息:Missing integer token, that is %i, in FileNamePattern [logs/sys-info.%d{yyyy-MM-dd}.log]

原因:在 FileNamePattern 中缺少了 %i 占位符,导致 Logback 无法正确解析滚动日志文件名。

解决方案

修改 FileNamePattern 配置: 在 FileNamePattern 中添加 %i 占位符,以便 Logback 可以正确地生成滚动日志文件。

示例配置:

  <configuration><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>logs/mis-info.log</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 每天生成一个新的日志文件,并且当文件大小超过10MB时进行滚动 --><fileNamePattern>logs/sys-info.%d{yyyy-MM-dd}.%i.log</fileNamePattern><maxFileSize>10MB</maxFileSize><maxHistory>30</maxHistory><totalSizeCap>1GB</totalSizeCap></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern></encoder></appender><root level="info"><appender-ref ref="FILE" /></root></configuration>

说明

%i 占位符:表示文件序号,当文件大小超过指定的 maxFileSize 时,会生成新的文件并增加序号。
<maxFileSize>:设置单个日志文件的最大大小。
<maxHistory>:设置保留的日志文件的最大天数。
<totalSizeCap>:设置所有日志文件的总大小上限。

通过以上配置,可以确保 Logback 正确地生成和管理滚动日志文件 

可参考

spring boot如何实现日志文件到期自动删除的 springboot日志保存_mob6454cc769a22的技术博客_51CTO博客

SpringBoot之logback 在Linux系统上启动的时候,设置日志按日期分割并设置指定时间自动清除日志_springboot日志记录定时清理-CSDN博客

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

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

相关文章

window11安装elasticsearch+Kibana

1、下载elasticsearch与elasticsearch 下载elasticsearch 查看elasticsearch对应的Kibana版本 下载elasticsearch解压后文件目录如下 可执行脚本文件,包括启动elasticsearch服务、插件管理、函数命令等 bin配置文件目录,如elasticsearch配置、角色配置、jvm配置等 conf 默认…

【HCIP园区网综合拓扑实验】配置步骤与详解(已施工完毕)

一、实验要求 实验拓扑图如上图所示 1、按照图示的VLAN及IP地址需求&#xff0c;完成相关配置 2、要求SW1为VLAN 2/3的主根及主网关 SW2为vlan 20/30的主根及主网关 SW1和SW2互为备份 3、可以使用super vlan&#xff08;本实验未使用&#xff09; 4、上层…

【基于PSINS工具箱】以速度为观测量的SINS/GNSS组合导航,UKF滤波

基于【PSINS工具箱】&#xff0c;提供一个MATLAB例程&#xff0c;仅以速度为观测量的SINS/GNSS组合导航&#xff08;滤波方式为UKF&#xff09; 文章目录 工具箱程序简述运行结果 代码程序讲解MATLAB 代码教程&#xff1a;使用UKF进行速度观测1. 引言与基本设置2. 初始设置3. U…

java访问华为网管软件iMaster NCE的北向接口时传递参数问题

上一篇文章介绍了利用《java访问华为网管软件iMaster NCE的北向接口》的一般性步骤&#xff0c;这里详细介绍其中一个读取性能数据的示例。原因是读取华为网管软件北向接口&#xff0c;完全找不到可供参考的例子。如果不需要传递什么参数&#xff0c;就能获取到结果&#xff0c…

基于SpringBoot的“在线考试系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“在线考试系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体结构图 系统登录界面图 用户注册界面图 管…

【2024软考架构案例题】你知道什么是 RESTful 风格吗?

&#x1f449;博主介绍&#xff1a; 博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家&#xff0c;WEB架构师&#xff0c;阿里云专家博主&#xff0c;华为云云享专家&#xff0c;51CTO 专家博主 ⛪️ 个人社区&#x…

科大讯飞面经,蛮简单的

先来看面经&#xff1a; 下面我来简单聊聊这些问题。 自我介绍 关于如何自我介绍&#xff0c;这个如果还不会或者还没有准备&#xff0c;请先准备好你要如何向面试官介绍自己。 面试本来就是一个自我推销的方式之一&#xff0c;如果自我介绍都不会说&#xff0c;你如何卖个好价…

首次超越扩散模型和非自回归Transformer模型!字节开源RAR:自回归生成最新SOTA!

文章链接&#xff1a;https://arxiv.org/pdf/2411.00776 项目链接&#xff1a;https://yucornetto.github.io/projects/rar.html 代码&模型链接&#xff1a;https://github.com/bytedance/1d-tokenizer 亮点直击 RAR&#xff08;随机排列自回归训练策略&#xff09;&#x…

通义千问API调用测试 (colab-python,vue)

文章目录 代码&#xff08;来自官网&#xff09;colab中用python测试Qwen2.5在官网上查看并确定过期时间这里看到我的免费额度到25年5月在同一个页面&#xff0c;点击API示例 前端调用直接在前端调用的优缺点以vue为例&#xff08;代码是基于官网node.js的代码转换而来&#xf…

立体工业相机提升工业自动化中的立体深度感知

深度感知对仓库机器人应用至关重要&#xff0c;尤其是在自主导航、物品拾取与放置、库存管理等方面。 通过将深度感知与各种类型的3D数据&#xff08;如体积数据、点云、纹理等&#xff09;相结合&#xff0c;仓库机器人可以在错综复杂环境中实现自主导航&#xff0c;物品检测…

LSTM+LightGBM+Catboost的stacking融合模型

基本介绍 针对目前大部分数据同时具有特征连续和特征不连续的特点&#xff0c;将神经网络模型如LSTM和回归树模型如XGboost,基于stacking集成学习原理进行融合 附有模型评价指标R2、RMSE、MAE、MSE&#xff0c;代码包含注释&#xff0c;可以直接运行。 融合过程 在机器学习中…

人工智能 | 文生视频大模型

简介 文生视频指的是将文本描述转化为视频内容的技术&#xff0c;2024年2月15日 OpenAI 正式对外发布 Sora 人工智能模型&#xff0c;在人工智能领域掀起了一场风波&#xff0c;这是计算机视觉领域的一个突破。 Sora 这一名称起源于日文中“空”的含义&#xff0c;暗示了其具…

测试实项中的偶必现难测bug--一键登录失败

问题描述:安卓和ios有出现部分一键登录失败的场景,由于场景比较极端,衍生了很多不好评估的情况。 产生原因分析: 目前有解决过多次这种行为的问题,每次的产生原因都有所不同,这边根据我个人测试和收集复现的情况列举一些我碰到的: 1、由于我们调用的是友盟的一键登录的…

Pr:视频过渡快速参考(合集 · 2025版)

Adobe Premiere Pro 自带七组约四十多个视频过渡 Video Transitions效果&#xff0c;包含不同风格和用途&#xff0c;可在两个剪辑之间创造平滑、自然的转场&#xff0c;用来丰富时间、地点或情绪的变化。恰当地应用过渡可让观众更好地理解故事或人物。 提示&#xff1a; 点击下…

Jest项目实战(7):部署文档网站到 GitHub Pages

关于部署网站&#xff0c;理论上来讲&#xff0c;只要你有一个服务器&#xff0c;你要采用什么样的方式来部署都是可以的。但是前提是你需要有一个服务器&#xff08;物理机、云服务器&#xff09;。 这一小节我们部署文档网站选择使用 github 来进行部署&#xff0c;因为 Git…

第十九周:机器学习

目录 摘要 Abstract 一、吴恩达机器学习Exp1——线性回归 1、单变量线性回归 1.1数据集的读取及可视化 1.2分割训练集和验证集 1.3扩展维度 1.4线性回归模型 1.5训练过程可视化 2、多变量线性回归 2.1加载数据集并可视化 2.2划分训练集和验证集 2.3线性回归模型 …

Mac保护电池健康,延长电池使用寿命的好方法

使用Mac的过程中&#xff0c;如何延长电池的使用寿命是大家非常关心的问题&#xff0c;而养成一个良好的充电习惯能够有效的延长电池的使用寿命 避免过度充电和过度放电能够有效的保护电池&#xff0c;因此长时间的充电与长时间放点都不可取&#xff0c;但是在日常的使用过程中…

Python 爬虫数据清洗与存储:基础教程

Python 爬虫数据清洗与存储&#xff1a;基础教程 在爬虫数据获取完成后&#xff0c;数据往往是“原始”的&#xff0c;不适合直接使用。清洗和存储是将爬取到的原始数据转化为有用信息的关键步骤。本文将系统地介绍 Python 中进行数据清洗与存储的基本方法&#xff0c;帮助新手…

【博主推荐】VUE开发常用技术点收集

文章目录 1.系统主题的全局颜色变量申明和使用2.样式里面导入样式3.页面返回顶部功能4.页面实时更新时间功能5.页面条件判断的几种方式6.页面v-for使用7.页面路由跳转的几种方式8.vue3 js引用的几种方式9.Vue中引用和使用一个组件10.页面传参的几种方式VUE系列前端模板源码其他…

day08(单片机)时钟系统+定时器+PWM

目录 时钟系统定时器PWM 时钟系统 时钟基本概念 时钟源 晶体振荡器&#xff08;Crystal Oscillator&#xff09; RC振荡器&#xff08;Resistor-Capacitor Oscillator&#xff09; ​​​​​​​STM32U5时钟源 HSI(High Speed Internal) HSE(High Speed External) LSI(Low Spe…