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

Spring Boot 项目日志系统全攻略:Logback、Log4j2、Log4j与SLF4J整合指南

Spring Boot 项目日志系统全攻略:Logback、Log4j2、Log4j与SLF4J整合指南

日志系统是应用程序不可或缺的组成部分,良好的日志实践能极大提升开发调试和线上问题排查的效率。本文将全面介绍Spring Boot项目中各种日志框架的配置与使用方案,包括Logback、Log4j2、Log4j以及SLF4J门面框架。

一、Spring Boot日志框架概述

Spring Boot支持多种日志框架实现,默认使用Logback,但也提供了对其他流行框架的支持:

  1. SLF4J:日志门面框架(必须)
  2. Logback:默认实现(Spring Boot官方推荐)
  3. Log4j2:高性能替代方案
  4. Log4j:旧版实现(不推荐新项目使用)

📌 最佳实践:无论使用哪种实现,都应该通过SLF4J API进行日志记录,保持代码与具体实现的解耦。

二、SLF4J + Logback配置方案

1. 基础配置(application.yml)

logging:level:root: INFOcom.example.demo: DEBUGfile:name: logs/app.logpattern:console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n"

2. 高级logback-spring.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds"><!-- 多环境配置 --><springProfile name="dev"><include resource="logback-dev.xml"/></springProfile><springProfile name="prod"><include resource="logback-prod.xml"/></springProfile><!-- 异步日志提升性能 --><appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"><queueSize>1024</queueSize><appender-ref ref="FILE"/></appender>
</configuration>

三、SLF4J + Log4j2配置方案

Log4j2在性能上优于Logback,适合高并发场景:

1. 添加依赖(需排除默认Logback)

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

2. log4j2-spring.xml配置示例

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30"><Appenders><!-- 异步日志 --><Async name="AsyncFile" bufferSize="1024"><File name="File" fileName="logs/app.log"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/></File></Async><!-- 按级别分离日志 --><RollingFile name="ErrorFile" fileName="logs/error.log"filePattern="logs/error-%d{yyyy-MM-dd}-%i.log"><ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/><Policies><TimeBasedTriggeringPolicy interval="1" modulate="true"/><SizeBasedTriggeringPolicy size="10 MB"/></Policies><DefaultRolloverStrategy max="30"/></RollingFile></Appenders><Loggers><Root level="info"><AppenderRef ref="AsyncFile"/><AppenderRef ref="ErrorFile"/></Root></Loggers>
</Configuration>

四、SLF4J + Log4j配置方案(兼容旧系统)

⚠️ 注意:Log4j 1.x已停止维护,存在安全漏洞,新项目不应使用

1. 依赖配置

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

2. log4j.properties示例

# 根日志级别和输出源
log4j.rootLogger=INFO, stdout, file# 控制台输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n# 文件输出
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=logs/app.log
log4j.appender.file.DatePattern='.'yyyy-MM-dd
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

五、日志框架性能对比

特性LogbackLog4j2Log4j
异步性能
配置灵活性极高
社区活跃度
内存消耗很低
支持JSON日志

💡 选型建议:新项目推荐Log4j2,传统项目可继续使用Logback

六、统一日志门面SLF4J最佳实践

1. 代码中正确使用SLF4J

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class UserService {// 使用SLF4J APIprivate static final Logger logger = LoggerFactory.getLogger(UserService.class);public void createUser(User user) {// 使用占位符避免字符串拼接logger.info("Creating user with username: {}", user.getUsername());try {// 业务逻辑} catch (Exception e) {// 记录完整异常堆栈logger.error("Failed to create user: {}", user.getUsername(), e);}}
}

2. 日志级别使用规范

级别使用场景
ERROR系统错误、业务流程中断等必须立即处理的问题
WARN非预期但不影响系统运行的情况,如参数格式错误、重试操作等
INFO重要的业务流程节点信息,如订单创建、支付成功等
DEBUG调试信息,如参数值、方法返回值等
TRACE极其详细的调试信息,通常用于跟踪程序执行流程

七、常见问题解决方案

1. 日志框架冲突问题

症状SLF4J: Class path contains multiple SLF4J bindings

解决:使用Maven的exclusion排除多余的绑定

<exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion>
</exclusions>

2. 日志文件不滚动

检查

  1. 文件权限是否正确
  2. 滚动策略配置是否合理
  3. 磁盘空间是否充足

3. 日志性能优化

  1. 使用异步Appender
  2. 避免在日志语句中进行复杂计算
  3. 生产环境关闭DEBUG日志

八、日志监控进阶方案

1. ELK Stack集成

<!-- Logstash编码器 -->
<dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>6.6</version>
</dependency>

logback.xml配置:

<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><destination>logstash:5000</destination><encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>

2. Prometheus监控指标

@Bean
public MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {return registry -> {registry.config().commonTags("application", "order-service","region", System.getenv("REGION"));};
}

九、总结

  1. 新项目推荐组合:SLF4J + Log4j2
  2. 传统项目组合:SLF4J + Logback
  3. 必须避免:直接使用Log4j 1.x
  4. 核心原则
    • 代码中始终使用SLF4J API
    • 合理选择日志级别
    • 生产环境使用异步日志
    • 建立完善的日志监控体系

通过合理配置日志系统,可以显著提升应用的可靠性和可维护性。建议根据项目实际需求选择合适的日志框架,并遵循本文介绍的最佳实践。

相关文章:

Spring Boot 项目日志系统全攻略:Logback、Log4j2、Log4j与SLF4J整合指南

Spring Boot 项目日志系统全攻略&#xff1a;Logback、Log4j2、Log4j与SLF4J整合指南 日志系统是应用程序不可或缺的组成部分&#xff0c;良好的日志实践能极大提升开发调试和线上问题排查的效率。本文将全面介绍Spring Boot项目中各种日志框架的配置与使用方案&#xff0c;包…...

【设计模式】责任链模式

简介 很多公司都有请假的流程&#xff0c;当员工提交请假申请时&#xff0c;请求会沿着 组长 → 经理 → CEO 的链条传递&#xff0c;直到有对应层级的领导处理。 适用场景 一个请求需要多个对象中的一个或多个处理&#xff08;如审批流程、过滤器链&#xff09;。处理对象和…...

智能气候前沿:AI Agent结合机器学习与深度学习在全球气候变化驱动因素预测

全球气候变化已成为21世纪最严峻的环境挑战&#xff0c;其复杂的驱动因素如温室气体排放、气溶胶浓度、野火、海冰融化以及农业和生态系统变化等&#xff0c;交织影响着全球的气候格局。 第一&#xff1a;气候变化驱动因素与数据科学基础 1.1气候变化 全球气候变化 中国碳中…...

es 原生linux部署集群

背景 目的&#xff1a; 1. 理解不同部署方式的架构差异 2. 对比环境配置的复杂度 3. 评估性能与资源管理 4. 探索扩展性与高可用性 5. 学习安全与隔离机制 6. 实践监控与维护 7. 掌握混合部署与云原生场景 实验的最终目标 技能提升&#xff1a; 全面掌握Elasticsear…...

Springboot 同时支持不同的数据库,Oracle,Postgresql

## 关键字 Java&#xff0c;Springboot&#xff0c;Vscode&#xff0c;支持多种数据库 ## 背景环境 我在实际项目开发工程中遇到这样一个问题&#xff0c;用户 A 使用 Oracle 数据库&#xff0c;用户 B 使用 Postgresql 数据库&#xff0c;但是用户 AB 都使用我们的项目。所以…...

go --- go run main.go 和 go run .

目录 go run main.gogo run .示例 go run main.go 功能&#xff1a;只编译和运行指定的文件&#xff08;main.go&#xff09;&#xff0c;忽略同目录下的其他文件。适用场景&#xff1a; 当你只需要运行一个独立的文件&#xff0c;且该文件不依赖其他文件时。适合单文件程序或…...

关于Spring MVC中@RequestMapping注解的详细解析,涵盖其核心功能、属性、使用场景及最佳实践

以下是关于Spring MVC中RequestMapping注解的详细解析&#xff0c;涵盖其核心功能、属性、使用场景及最佳实践&#xff1a; 1. 基础概念 RequestMapping是Spring MVC的核心注解&#xff0c;用于将HTTP请求映射到控制器&#xff08;Controller&#xff09;的方法上。它支持类级…...

deepseek使用记录26——从体力异化到脑力异化

我们的一切发现和进步&#xff0c;似乎结果是使物质力量具有理智生命&#xff0c;而人的生命则化为愚钝的物质力量。AI快速发展的现实中&#xff0c;人面临着比工业革命更深刻的异化。在工业革命中&#xff0c;人的身躯沦为了机器的一部分&#xff0c;而现在人的脑袋沦为了AI的…...

Ubertool 的详细介绍、安装指南及使用说明

Ubertool&#xff1a;多协议网络分析与调试平台 一、Ubertool 简介 Ubertool 是一款开源的 多协议网络分析工具&#xff0c;专为物联网&#xff08;IoT&#xff09;、嵌入式系统和工业自动化领域设计。它支持蓝牙、Wi-Fi、LoRa、CAN总线等多种通信协议的实时监控、数据包捕获…...

用 HTML、CSS 和 jQuery 打造多页输入框验证功能

在网页开发中&#xff0c;输入框验证是至关重要的一环&#xff0c;它能确保用户输入的数据符合特定要求&#xff0c;提升交互的准确性与流畅性。今天&#xff0c;我们就来深入剖析一个运用 HTML、CSS 和 jQuery 实现多页输入框验证的精彩实例&#xff0c;带你领略前端开发中表单…...

在CentOS上安装Docker需要注意的事项

文章目录 前言Docker Engine如何设置仓库设置镜像加速器获取镜像加速器地址 写在前面&#xff1a;大家好&#xff01;我是晴空๓。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正&#xff0c;感谢大家的不吝赐教。我的唯一博客更新地址是&#xff1a;https://ac-…...

Chrome 135 版本新特性

Chrome 135 版本新特性 一、Chrome 135 版本浏览器更新 ** 1. 第三方托管账户注册迁移到 OIDC 授权码流程** Chrome 135 将账户注册的登录页面从营销网站迁移到动态网站&#xff0c;同时也将 OpenID Connect (OIDC) 的隐式流程迁移到授权码流程。这样做的目的是进一步提升第…...

CMake实战指南一:add_custom_command

CMake 进阶&#xff1a;add_custom_command 用法详解与实战指南 在 CMake 构建系统中&#xff0c;add_custom_command 是一个灵活且强大的工具&#xff0c;允许开发者在构建流程中插入自定义操作。无论是生成中间文件、执行预处理脚本&#xff0c;还是在目标构建前后触发额外逻…...

K8S学习之基础七十五:istio实现灰度发布

istio实现灰度发布 上传镜像到harbor 创建两个版本的pod vi deployment-v1.yaml apiVersion: apps/v1 kind: Deployment metadata:name: appv1labels:app: v1 spec:replicas: 1selector:matchLabels:app: v1apply: canarytemplate:metadata:labels:app: v1apply: canaryspec…...

7-1 列出连通集

作者 陈越 单位 浙江大学 给定一个有 n 个顶点和 m 条边的无向图&#xff0c;请用深度优先遍历&#xff08;DFS&#xff09;和广度优先遍历&#xff08;BFS&#xff09;分别列出其所有的连通集。假设顶点从 0 到 n−1 编号。进行搜索时&#xff0c;假设我们总是从编号最小的顶点…...

XML Schema 指示器

XML Schema 指示器 引言 XML Schema 是一种用于定义 XML 文档结构的语言,它能够确保 XML 文档的合法性。在 XML 文档的解析和应用中,XML Schema 指示器(XML Schema Indicator)扮演着至关重要的角色。本文将详细介绍 XML Schema 指示器的概念、作用、应用场景以及如何使用…...

Linux内核中TCP协议栈的实现:tcp_close函数的深度剖析

引言 TCP(传输控制协议)作为互联网协议族中的核心协议之一,负责在不可靠的网络层之上提供可靠的、面向连接的字节流服务。Linux内核中的TCP协议栈实现了TCP协议的全部功能,包括连接建立、数据传输、流量控制、拥塞控制以及连接关闭等。本文将深入分析Linux内核中tcp_close…...

17-产品经理-创建发布

点击“发布”-“创建发布”。 填写发布名称&#xff0c;选择测试的版本。还可以设置此次发布是否为“里程碑”。 点击“保存”后&#xff0c;进入该发布详情页面。需要为此次发布关联需求、已解决BUG、以及遗留BUG。可以通过设置条件&#xff0c;进行“搜索”&#xff0c;然后批…...

了解Spring的统一功能

目录 一、统一数据返回格式 1.引入统一数据返回格式 2.学习使用统一数据返回格式 support方法 beforeBodyWrite方法 统一数据返回格式具体逻辑 使用统一数据返回格式存在的问题 解决方法&#xff1a; 统一数据返回格式的优点 统一数据返回格式代码实现&#xff08;包含了…...

123213

根据道路在道路网的地位、交通功能、对沿线的服务功能划分可分为快速路、主干路、次干路及支路 快速路完全为交通功能服务, 主干路以交通功能为主, 次干路是城市区域性的交通干道&#xff0c;为区域交通集散服务&#xff0c;兼有服务功能&#xff0c;结合主干路组成干路网 …...

通过 axios 请求回来的 HTML 字符串渲染到 Vue 界面上并添加样式

1. 通过 axios 获取数据 使用 axios 发起请求&#xff0c;获取返回的 HTML 字符串数据。 2. 在 Vue 中处理和渲染数据 由于 HTML 字符串中可能包含一些标签和样式&#xff0c;直接插入到 Vue 的模板中可能会导致样式问题。可以通过以下方式处理&#xff1a; 方法一&#xf…...

P1162 填涂颜色(BFS)

题目描述 由数字 0 组成的方阵中&#xff0c;有一任意形状的由数字 1 构成的闭合圈。现要求把闭合圈内的所有空间都填写成 2。例如&#xff1a;66 的方阵&#xff08;n6&#xff09;&#xff0c;涂色前和涂色后的方阵如下&#xff1a; 如果从某个 0 出发&#xff0c;只向上下…...

【笔记】VS中C#类库项目引用另一个类库项目的方法

VS中C#类库项目引用另一个类库项目的方法 在 C# 开发中&#xff0c;有时我们需要在一个类库项目中引用另一个类库项目&#xff0c;但另一个项目可能尚未编译成 DLL。在这种情况下&#xff0c;我们仍然可以通过 Visual Studio 提供的项目引用功能进行依赖管理。 &#x1f3af; …...

进程内存分布--之smaps呈现memory-layout.cpp内存分布

上一篇介绍了&#xff1a;进程内存分布--之单线程代码来内存分布呈现memory-layout.cpp 这里我们使用smaps将更加形象的的体现内存分布&#xff0c;smaps文件是Linux的proc文件系统提供的一种可以查看内存资源使用情况的方法,Linux系统中运行的库、堆、栈等信息都可在smaps中查…...

再看自适应RAG方法:SEAKR|PIKE-RAG|DeepRAG

当大语言模型开始"怀疑人生":一场关于知识检索的AI内心戏 各位看官,今天我们要聊一个AI界的"哲学难题"——当大语言模型突然意识到自己可能是个"半瓶子醋",会发生什么奇妙反应? 想象一下这个场景:某天深夜,ChatGPT正对着用户提问"如…...

DNS服务(Linux)

DNS 介绍 dns&#xff0c;Domain Name Server&#xff0c;它的作用是将域名解析为 IP 地址&#xff0c;或者将IP地址解析为域名。 这需要运行在三层和四层&#xff0c;也就是说它需要使用 TCP 或 UDP 协议&#xff0c;并且需要绑定端口&#xff0c;53。在使用时先通过 UDP 去…...

探秘PythonJSON解析深度剖析json.loads处理嵌套JSON字符串的奥秘

哈喽,大家好,我是木头左! 在当今数字化时代,数据以各种格式呈现,而JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,在众多领域广泛应用。Python作为一门强大的编程语言,其内置的json模块为处理JSON数据提供了便捷的方法。然而,当遇到像{"name&q…...

Day7 FIFO与鼠标控制

文章目录 1. harib04a例程&#xff08;获取按键编码&#xff09;2. harib04b例程&#xff08;加快中断处理&#xff09;3. harib04c例程&#xff08;FIFO缓冲区&#xff09;4. harib04d例程&#xff08;改善FIFO缓冲区&#xff09;5. harib04e例程&#xff08;整理FIFO缓冲区&a…...

软件工程第一章习题

第1章软件与软件工程 1.选择题 (1)下列说法中正确的是( &#xff09;o A.20世纪50年代提出了软件工程的概念 B.20世纪60年代提出了软件工程的概念 C.20世纪70年代出现了客户机/服务器技术 D.20世纪80年代软件工程学科达到成熟 (2)软件危机的主要原因是( Do B.软件生产…...

Ollama 手动高速下载Win/Linux/Mac安装包及安装方法

前言 Ollama下载速度太慢&#xff0c;按这个方式&#xff0c;速度嘎嘎的快----下载地址 手动安装 如果要从以前的版本升级&#xff0c;则应删除旧库。比如&#xff1a;sudo rm -rf /usr/lib/ollama 解压 tar -C /usr -xzf ollama-linux-amd64.tgz # 解压到/usr文件夹# 如…...

Jmeter+Jenkins+Ant自动化持续集成环境搭建

一、安装准备 1.JDK:jdk-8u121-windows-x64 2.jmeter工具&#xff1a;apache-jmeter-2.13 3.ANT工具&#xff1a;apache-ant-1.9.7-bin 4.jenkins工具&#xff1a;jenkins-2.32.2 二、软件安装 1.JDK的安装 >双击JDK安装包&#xff0c;选择安装路径&#xff08;本人是…...

【11】Redis快速安装与Golang实战指南

文章目录 1 Redis 基础与安装部署1.1 Redis 核心特性解析1.2 Docker Compose 快速部署1.3 Redis 本地快速部署 2 Golang 与 Redis 集成实战2.1 环境准备与依赖安装2.2 核心操作与数据结构实践2.2.1 基础键值操作2.2.2 哈希结构存储用户信息 3 生产级应用场景实战3.1 分布式锁实…...

ISP算法.红外图像增强

在图像处理领域&#xff0c;常见的图像处理一般都是白光相机&#xff0c;实际红外相机也是常见的一种相机&#xff0c;它可以用来对发热的东西进行成像&#xff0c;也可以作为白光相机夜晚不可见的一种辅助手段&#xff0c;为白光相机赋能夜视能力。 红外相机的成像原理在于辐射…...

Spring Boot中使用RedisTemplate操作Redis的几种数据类型详解

Redis作为高性能的键值存储系统&#xff0c;在现代Java应用中扮演着重要角色。Spring Boot通过RedisTemplate为开发者提供了便捷的Redis操作方式。本文将详细介绍如何使用RedisTemplate操作Redis的五种主要数据类型。 一、RedisTemplate简介 RedisTemplate是Spring Data Redi…...

大数据与人工智能之大数据架构(Hadoop、Spark、Flink)

一、核心特性与架构设计 1. Hadoop&#xff1a;分布式批处理的基石 核心组件&#xff1a; HDFS&#xff1a;分布式文件系统&#xff0c;支持大规模数据存储。MapReduce&#xff1a;基于“分而治之”的批处理模型&#xff0c;适合离线分析。 架构特点&#xff1a; 批处理主导&…...

VSCode中Marp插件

VSCode神级插件Marp&#xff0c;用Markdown来做PPT 优秀教程&#xff1a;https://zhuanlan.zhihu.com/p/582872955...

C++20 数学常数:<numbers> 头文件的革新

文章目录 一、<numbers> 头文件中的数学常数二、使用示例三、优势与应用场景&#xff08;一&#xff09;提高代码可读性&#xff08;二&#xff09;提高精度&#xff08;三&#xff09;适用于多种数据类型&#xff08;四&#xff09;简化数学计算 四、总结 C20 标准引入了…...

OpenCV--图像平滑处理

在数字图像处理领域&#xff0c;图像平滑处理是一项极为重要的技术&#xff0c;广泛应用于计算机视觉、医学影像分析、安防监控等多个领域。在 OpenCV 这一强大的计算机视觉库的助力下&#xff0c;我们能便捷地实现多种图像平滑算法。本文将深入探讨图像平滑的原理&#xff0c;…...

【KMP】P7114 [NOIP2020] 字符串匹配|省选-

本文涉及知识点 较难理解的字符串查找算法KMP P7114 [NOIP2020] 字符串匹配 题目描述 小 C 学习完了字符串匹配的相关内容&#xff0c;现在他正在做一道习题。 对于一个字符串 S S S&#xff0c;题目要求他找到 S S S 的所有具有下列形式的拆分方案数&#xff1a; S A …...

C++20 统一容器擦除:std::erase 和 std::erase_if

文章目录 一、std::erase 的用法1.1 语法1.2 参数1.3 返回值1.4 示例 二、std::erase_if 的用法2.1 语法2.2 参数2.3 返回值2.4 示例 三、优势与应用场景3.1 统一的接口3.2 简化代码3.3 适用范围广 四、总结 C20 引入了两个非常实用的函数模板&#xff1a; std::erase 和 std…...

阿里云oss视频苹果端无法播放问题记录

记录一下苹果端视频不可以播放的原因. 看了一下其他视频可以正常播放,但是今天客户发来的视频无法正常播放.咨询过阿里云售后给出的原因是编码格式过高. 需要调整编码格式为:baseline, 下面记录如何使用ffmpeg修改视频的编码格式. 下载文件(可从官方下载) 配置环境变量(系统变…...

10-MySQL-性能优化思路

1、优化思路 当我们发现了一个慢SQL的问题的时候&#xff0c;需要做性能优化&#xff0c;一般我们是为了提高SQL查询更快&#xff0c;一个查询的流程由下图的各环节组成&#xff0c;每个环节都会消耗时间&#xff0c;要减少消耗时候需要从各个环节都分析一遍。 2 连接配置优化…...

Postman之参数化详解

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 小伙伴们&#xff0c;好久不见呀&#xff0c;今天呢笔者想和大家聊聊postman参数化&#xff0c;在接口测试中&#xff0c;部分参数每次发送请求是唯一的数值&a…...

【c++深入系列】:类和对象详解(下)

&#x1f525; 本文专栏&#xff1a;c &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; 你的人生剧本&#xff0c;不是父母的续集&#xff0c;不是子女的前传&#xff0c;更不是朋友的外传——你是自己故事的主角 ★★★ 本文前…...

浅谈「分词」:原理 + 方案对比 + 最佳实践

在文本搜索、自然语言处理、智能推荐等场景中&#xff0c;「分词」 是一个基础但至关重要的技术点。无论是用数据库做模糊查询&#xff0c;还是构建搜索引擎&#xff0c;分词都是提高效率和准确度的核心手段。 &#x1f50d; 一、什么是分词&#xff1f; 分词&#xff08;Tok…...

第十八:GC 垃圾回收

2.1 三色标记# 灰色&#xff1a;对象已被标记&#xff0c;但这个对象包含的子对象未标记黑色&#xff1a;对象已被标记&#xff0c;且这个对象包含的子对象也已标记&#xff0c;gcmarkBits对应的位为1&#xff08;该对象不会在本次GC中被清理&#xff09;白色&#xff1a;对象…...

【微机及接口技术】- 第七章 可编程定时/计数器

文章目录 第一节 定时/计数器的概述一、定时与计数二、定时方法 第二节 可编程定时/计数器8254一、8254-2的基本功能二、8254的内部结构和外部引脚三、8254 的工作方式1. 方式0&#xff1a;计数到零产生中断方式2. 方式1&#xff1a;硬件可重触发单稳方式3. 方式2&#xff1a;速…...

MES生产工单管理系统,Java+Vue,含源码与文档,实现生产工单全流程管理,提升制造执行效率与精准度

前言&#xff1a; MES生产工单管理系统是制造业数字化转型的核心工具&#xff0c;通过集成生产、数据、库存等模块&#xff0c;实现全流程数字化管理。以下是对各核心功能的详细解析&#xff1a; 一、生产管理 工单全生命周期管理 创建与派发&#xff1a;根据销售订单或生产计…...

【区块链安全 | 第三十五篇】溢出漏洞

文章目录 溢出上溢示例溢出漏洞溢出示例漏洞代码代码审计1. deposit 函数2. increaseLockTime 函数 攻击代码攻击过程总结修复建议审计思路 溢出 算术溢出&#xff08;Arithmetic Overflow&#xff09;&#xff0c;简称溢出&#xff08;Overflow&#xff09;&#xff0c;通常分…...

【自记录】ubuntu命令行下禁用指定声卡

设备上内置了一块声卡&#xff0c;出于某些原因我希望禁用他。 通过arecord -l可以查看到该设备 $ arecord -l **** List of CAPTURE Hardware Devices **** card 0: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio]Subdevices: 1/1Subdevice #0: subdevice…...