Log4j2 详解(异步日志打印及CSV格式日志输出)
Log4j2 详解
Apache Log4j2 是一个功能强大的 Java 日志记录框架,提供高性能和灵活的配置。本文档涵盖了 Log4j2 的核心功能及其详细使用方式,包括基础配置、异步日志、CSV 格式日志的输出以及使用注意事项。
一 Log4j2 基础概念与配置
1.1 Log4j2 介绍
Log4j2 是 Log4j 的下一代版本,相比 Log4j 1.x 和其他日志框架(如 Logback),它在性能和功能上有显著改进:
- 支持异步日志,减少对应用性能的影响。
- 提供插件化架构,易于扩展。
- 支持 JSON、XML、YAML 等多种配置格式。
- 动态日志级别调整,便于调试。
1.2 核心组件
Log4j2 的核心组件包括:
- Logger:用于记录日志。
- Appender:日志输出目的地(如文件、控制台)。
- Layout:日志格式化方式。
- Filter:日志过滤器,决定日志是否被记录。
二 正常的配置文件格式
Log4j2 支持以下配置文件格式:
log4j2.xml
:最常见的配置方式。log4j2.properties
:简洁配置。log4j2.yaml/json
:结构化配置。
以下是 XML 配置文件的基本示例:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"><Appenders><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n"/></Console></Appenders><Loggers><Root level="info"><AppenderRef ref="Console"/></Root></Loggers>
</Configuration>
三 异步日志配置
异步日志可以显著提升性能,将日志记录从主线程中分离开,转由异步线程处理。以下是完整的独立 XML 配置以及启动 JVM 的参数配置:
3.1 异步日志 XML 配置
以下是完整的 log4j2.xml
配置示例,包含控制台和文件日志输出:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30"><!-- 定义 Appenders --><Appenders><!-- 控制台输出 --><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n"/></Console><!-- 文件输出 --><RollingFile name="AsyncFile" fileName="logs/async-log.log" filePattern="logs/async-log-%d{yyyy-MM-dd}.log"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n"/><Policies><TimeBasedTriggeringPolicy interval="1" modulate="true"/><SizeBasedTriggeringPolicy size="10MB"/></Policies></RollingFile></Appenders><!-- 定义异步 Loggers --><Loggers><!-- 异步日志器 --><AsyncLogger name="com.example" level="debug"><AppenderRef ref="Console"/><AppenderRef ref="AsyncFile"/></AsyncLogger><!-- 根日志器 --><Root level="info"><AppenderRef ref="Console"/></Root></Loggers>
</Configuration>
3.2 启动 JVM 参数
为确保 Log4j2 使用异步日志,需在log4j2.component.properties添加以下 JVM 参数:
-Dlog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
也可以通过以下方式配置 JVM 参数:
- 在应用程序运行时通过命令行添加:
java -Dlog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector -jar your-app.jar
- 在 IDE 中(如 IntelliJ IDEA 或 Eclipse),在运行配置中添加上述 JVM 参数。
3.3 示例代码
以下是使用异步日志的 Java 示例:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;public class AsyncLoggerExample {private static final Logger logger = LogManager.getLogger(AsyncLoggerExample.class);public static void main(String[] args) {for (int i = 0; i < 1000; i++) {logger.info("This is an async log message: {}", i);}System.out.println("Log generation completed.");}
}
3.4 注意事项
-
日志丢失问题:
-
异步日志可能导致 JVM 崩溃时的日志丢失。可启用
shutdownHook
确保日志缓冲区清空。同样需要在log4j2.component.properties同添加log4j2.shutdownHookEnabled=true
-
-
性能优化:
- 异步日志器适用于高吞吐量场景,请根据实际需求调整日志输出级别和日志格式。
备注:
异步日志相关的配置参数
参数名 | 描述 | 默认值 |
---|---|---|
log4j2.contextSelector | 设置日志上下文选择器。支持 org.apache.logging.log4j.core.async.AsyncLoggerContextSelector 来启用异步日志。 | org.apache.logging.log4j.core.async.AsyncLoggerContextSelector |
log4j2.asyncLoggerRingBufferSize | 设置异步日志的 RingBuffer 缓冲区大小,必须是 2 的幂。 | 262144 |
log4j2.asyncLoggerThreadCount | 设置用于异步日志的线程数。 | 2 |
log4j2.asyncLoggerQueueFullPolicy | 设置队列满时的处理策略,可能的值有 Discard (丢弃日志)和 Blocking (阻塞日志)。 | Blocking |
log4j2.asyncLoggerWaitStrategy | 设置异步日志的等待策略,可选值:Blocking 、Yielding 、Sleeping 。 | Blocking |
log4j2.asyncLoggerConfig | 设置是否启用异步日志的配置,true 表示启用,false 表示禁用。 | true |
log4j2.asyncLoggerMonitorInterval | 设置异步日志监视器的时间间隔(毫秒)。 | 500 |
log4j2.asyncLoggerExceptionHandler | 设置异常处理程序类,当异步日志失败时会调用该类。 | org.apache.logging.log4j.core.async.DefaultExceptionHandler |
log4j2.asyncLoggers | 配置是否启用所有异步日志记录器,true 为启用,false 为禁用。 | true |
log4j2.enable.async | 启用异步日志功能。 | true |
四 CSV 格式日志输出
Log4j2 支持通过自定义 Layout 实现 CSV 格式的日志输出。
4.1 配置示例
以下是使用 CsvLayout
的配置:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"><Appenders><File name="CsvFile" fileName="logs/app.csv"><CsvLayout delimiter="," header="Timestamp,Level,Logger,Message"/></File></Appenders><Loggers><Root level="info"><AppenderRef ref="CsvFile"/></Root></Loggers>
</Configuration>
4.2 输出格式示例
Timestamp,Level,Logger,Message
2024-12-22 12:34:56,INFO,com.example.Main,Application started
2024-12-22 12:34:57,ERROR,com.example.Main,Null pointer exception
五 注意事项
-
异步日志使用时的注意事项:
- 异步日志依赖 Disruptor 库,确保在项目中正确引入。
- 注意日志丢失问题,可通过
includeLocation="true"
提供精确的日志上下文信息,但可能影响性能。
-
日志配置文件的监控:
- 使用
monitorInterval
属性实现动态配置文件更新。
- 使用
-
日志级别配置:
- 日志级别顺序:
TRACE < DEBUG < INFO < WARN < ERROR < FATAL
。 - 日志级别的选择需根据实际需求,避免记录过多无用日志。
- 日志级别顺序:
-
文件日志的清理:
- 配置
RollingFileAppender
实现日志文件的自动切分和清理,避免磁盘空间耗尽。
- 配置
六 综合示例
以下是一个结合异步日志、CSV 输出和文件滚动功能的综合配置:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30"><Appenders><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n"/></Console><RollingFile name="File" fileName="logs/app.log" filePattern="logs/app-%d{yyyy-MM-dd}.log"><CsvLayout delimiter="," header="Timestamp,Level,Logger,Message"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="10MB"/></Policies></RollingFile><Async name="AsyncConsole"><AppenderRef ref="Console"/></Async></Appenders><Loggers><Root level="debug"><AppenderRef ref="AsyncConsole"/><AppenderRef ref="File"/></Root></Loggers>
</Configuration>
Java 测试代码
public class ComprehensiveExample {private static final Logger logger = LogManager.getLogger(ComprehensiveExample.class);public static void main(String[] args) {for (int i = 0; i < 100; i++) {logger.info("Logging message number: {}", i);}}
}
七 Maven 依赖
以下是 Log4j2 的 Maven 配置:
<dependencies><!-- Log4j2 核心依赖 --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.23.0</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.23.0</version></dependency><!-- 支持异步日志所需的 Disruptor 库 --><dependency><groupId>com.lmax</groupId><artifactId>disruptor</artifactId><version>3.4.4</version></dependency><!-- Apache Commons CSV 用于处理 CSV 格式数据 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-csv</artifactId><version>1.10.0</version></dependency>
</dependencies>
八 可在 log4j2.component.properties 中配置的参数
1. 通用设置
参数名 | 描述 | 默认值 |
---|---|---|
log4j2.configurationFile | 指定 Log4j2 配置文件的路径(如 log4j2.xml )。 | 自动检测配置 |
log4j2.statusLogger.level | 设置 Log4j2 状态日志的级别,可选值:trace 、debug 、info 、warn 、error 、fatal 。 | error |
log4j2.asyncLoggerRingBufferSize | 设置异步日志的 RingBuffer 缓冲区大小,值必须是 2 的幂。 | 262144 |
log4j2.contextSelector | 指定上下文选择器,可选值:org.apache.logging.log4j.core.async.AsyncLoggerContextSelector 。 | 同步日志 |
log4j2.disable.jmx | 禁用 JMX 功能,值:true 或 false 。 | false |
log4j2.name | 设置当前日志上下文的名称,用于区分多个日志上下文。 | 未指定 |
log4j2.threadContextMap | 设置线程上下文映射的实现类(自定义或内置实现)。 | Default |
2. 资源管理
参数名 | 描述 | 默认值 |
---|---|---|
log4j2.shutdownHookEnabled | 是否启用 JVM 关闭时的 Shutdown Hook。 | true |
log4j2.waitMillisBeforeStop | 停止日志系统前的等待时间(毫秒)。 | 0 |
log4j2.ignoreTCL | 是否忽略线程上下文类加载器(Thread Context ClassLoader)。 | false |
3. 文件相关设置
参数名 | 描述 | 默认值 |
---|---|---|
log4j2.defaultStatusFile | 将状态日志输出到指定文件路径(如 logs/log4j2-status.log )。 | 未指定 |
log4j2.skipJansi | 是否跳过 Jansi 库的加载(用于支持控制台颜色输出)。 | false |
4. 性能优化
参数名 | 描述 | 默认值 |
---|---|---|
log4j2.enable.threadlocals | 是否启用线程本地变量(ThreadLocal)优化。 | true |
log4j2.enable.directEncoders | 是否启用直接缓冲区编码器优化。 | true |
log4j2.disableThreadContext | 禁用线程上下文功能(Thread Context Map 和 Stack)。 | false |
log4j2.garbagefreeThreadContextMap | 启用无垃圾(Garbage-Free)线程上下文映射实现。 | true |
log4j2.boundedQueueSize | 设置异步队列的最大大小。 | 4096 |
5. JMX 和监控
参数名 | 描述 | 默认值 |
---|---|---|
log4j2.jmx.notifyStatusListeners | 是否通知 JMX 状态监听器。 | false |
log4j2.contextSelector | 设置日志上下文选择器,支持 JMX 监控多个上下文。 | 未指定 |
6. 高级配置
参数名 | 描述 | 默认值 |
---|---|---|
log4j2.initialReusableMsgSize | 设置初始可复用消息(ReusableMsg)的大小。 | 128 |
log4j2.maxReusableMsgSize | 设置最大可复用消息(ReusableMsg)的大小。 | 518 |
log4j2.enableJndi | 是否启用 JNDI 功能,可选值:true 或 false (建议关闭以防止安全问题)。 | false |
log4j2.jndi.lookup.class | 自定义 JNDI 查找实现类。 | 默认实现类 |
相关文章:
Log4j2 详解(异步日志打印及CSV格式日志输出)
Log4j2 详解 Apache Log4j2 是一个功能强大的 Java 日志记录框架,提供高性能和灵活的配置。本文档涵盖了 Log4j2 的核心功能及其详细使用方式,包括基础配置、异步日志、CSV 格式日志的输出以及使用注意事项。 一 Log4j2 基础概念与配置 1.1 Log4j2 介绍…...
[网络安全] DVWA之Content Security Policy (CSP) Bypass 攻击姿势及解题详析合集
CSP概念 CSP 是 Content Security Policy(内容安全策略)的缩写,是一种用于增强 Web 应用程序安全性的安全机制。它通过允许网站管理员控制页面中加载内容的来源来减少跨站脚本攻击(XSS)等常见的安全风险。 CSP 的工作…...
linux shell脚本 【分支结构case...in 、循环结构、函数】内附练习
1.思维导图 2.练习 1.定义一个find函数,查找ubuntu和root的gid 2.定义一个数组,写一个函数完成对数组的冒泡排序 bubble() {n${#arr[*]}for((i0;i<n-1;i));dofor((j0;j<n-1-i;j));doif ((arr[j]>arr[j1]));thentemp${arr[j]}arr[j]${arr[j1]}a…...
C# 设计模式(结构型模式):桥接模式
C# 设计模式(结构型模式):桥接模式 在软件设计中,我们经常会遇到系统的变化频繁,或者需要灵活扩展功能的场景。这时,桥接模式(Bridge Pattern)便显得尤为重要。桥接模式是一个结构型…...
RC充电电路仿真与分析
RC充电原理 下图是一个常见的RC充电电路:(假设R10K,C100nF) SW断开时,这个电路处于断路状态,C既没有充电也没有放电;SW闭合时,直流电源5V为电容C充电; 充电时电容两端…...
在 SQL 中获取第m个开始的n条记录方法汇总
在 SQL 中,要获取第m个开始的n条记录,主要取决于你使用的数据库系统和支持的功能。以要获取第10个开始的20条记录为例说明几种常见的方法: 1. 使用 LIMIT 和 OFFSET 适用于 MySQL、PostgreSQL 等支持 LIMIT 的数据库。 SELECT * FROM table…...
Linux 35.6 + JetPack v5.1.4之编译 pytorch
Linux 35.6 JetPack v5.1.4之编译 pytorch 1. 源由2. 折腾3. 构建步骤3.1 下载代码3.2 编译选项3.3 CUDA选项3.4 CUDA路径3.5 版本控制3.6 编译whl 4. 总结5. 参考资料 1. 源由 目前,有很多科研性质的自动导航的开源代码,例如: Linux 35.5…...
docker 部署nginx
1、拉取阿里的nginx镜像: docker pull crpi-k5k93ldwfc7o75ip.cn-hangzhou.personal.cr.aliyuncs.com/list_su/nginx:stable-perl 2、官方nginx镜像: docker pull nginx:stable-perl 3、创建挂载文件目录 mkdir nginx && cd nginx mkdir c…...
深入刨析数据结构之排序(上)
目录 1.内部排序 1.1概述 1.2插入排序 1.2.1其他插入排序 1.2.1.1 折半插入排序 1.2.1.2 2-路插入排序 1.3希尔排序 1.4快速排序 1.4.1起泡排序 1.4.2快速排序 1.4.2.1hoare版本 1.4.2.2挖坑版本 1.4.2.3前后指针版本 1.4.2.4优化版本 1.4.2.4.1小区间插入排序优…...
Java - 日志体系_Apache Commons Logging(JCL)日志接口库_桥接Logback 及 源码分析
文章目录 PreApache CommonsApache Commons ProperLogging (Apache Commons Logging ) JCL 集成logbackPOM依赖配置文件 logback.xml使用 源码分析jcl-over-slf4j 的工作原理1. LogFactory 的实现2. SLF4JLogFactory 和 Log 的实例化过程3. SLF4JLog 和 …...
力扣刷题:栈和队列OJ篇(下)
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 目录 1.括号匹配问题(1)题目…...
QT:控件属性及常用控件(1)------核心控件及属性
一个图形化界面上的内容,不需要我们直接从零去实现 QT中已经提供了很多的内置控件: 按钮,文本框,单选按钮,复选按钮,下拉框等等。。。。。 文章目录 1.常用控件属性1.1 enabled1.2 geometry1.2.1 geometry…...
【juc】Lock锁和AQS的继承关系
目录 1. 说明2. Lock接口与AQS的关系2.1 Lock接口2.2 AQS(AbstractQueuedSynchronizer) 3. ReentrantLock与AQS的具体联系3.1 ReentrantLock的实现3.2 AQS在ReentrantLock中的作用 1. 说明 1.Lock锁和AQS(AbstractQueuedSynchronizer&#x…...
自学记录鸿蒙API 13:实现多目标识别Object Detection
起步:什么叫多目标识别? 无论是生活中的动物识别、智能相册中的场景分类,还是工业领域的检测任务,都能看到多目标识别的身影。这次,我决定通过学习HarmonyOS最新的Object Detection API(API 13)…...
BOC调制信号matlab性能仿真分析,对比功率谱,自相关性以及抗干扰性
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频)…...
C# 事件机制
C# 事件机制详解:从概念到实践 在 C# 中,事件机制是处理对象间通信的重要方式,尤其是在 GUI 应用程序(如 WPF、WinForms)中,事件用于响应用户交互(如按钮点击、鼠标移动等)。本文将…...
使用 Python 实现随机中点位移法生成逼真的裂隙面
使用 Python 实现随机中点位移法生成逼真的裂隙面 一、随机中点位移法简介 1. 什么是随机中点位移法?2. 应用领域 二、 Python 代码实现 1. 导入必要的库2. 函数定义:随机中点位移法核心逻辑3. 设置随机数种子4. 初始化二维裂隙面5. 初始化网格的四个顶点…...
GPT分区 使用parted标准分区划分,以及相邻分区扩容
parted 是一个功能强大的命令行工具,用于创建和管理磁盘分区表和分区。它支持多种分区表类型,如 MBR(msdos)、GPT(GUID Partition Table)等,并且可以处理大容量磁盘。parted 提供了一个交互式界…...
【Triton-ONNX】如何使用 ONNX 模型服务与 Triton 通信执行推理任务上-Triton快速开始
模型部署系列文章 前置-docker 理解:【 0 基础 Docker 极速入门】镜像、容器、常用命令总结前置-http/gRPC 的理解: 【HTTP和gRPC的区别】协议类型/传输效率 /性能等对比【保姆级教程附代码】Pytorch (.pth) 到 TensorRT (.plan) 模型转化全流程【保姆级教程附代码(二)】Pytor…...
问题记录:[FATAL] [1735822984.951119148]: Group ‘manipulator‘ was not found.
前言:最近仿照UR5手眼标定的例程,在新的机械臂上进行手眼标定,还准备用easy_hand手眼标定包。将机器人功能包导入到工作空间后进行编译运行,启动launch文件: roslaunch easy_handeye eye_to_hand_CR7_calibration.lau…...
SpringCloudAlibaba实战入门之Sentinel服务降级和服务熔断(十五)
一、Sentinel概述 1、Sentinel是什么 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 一句话概括:sentinel即Hystrix的替代品,官网: https://sentinelguard.io/zh…...
Scrum中敏捷项目经理(Scrum Master)扮演什么角色?
敏捷开发模式已经逐渐被主流的软件研发团队所接受,其中Scrum是最具代表性的敏捷方法之一。Scrum框架中有三个核心角色:Product Owner(PO)、Scrum Master(SM)和Development Team(DT)。…...
SpringMVC(四)响应
目录 数据处理及跳转 1. 结果跳转方式 ①.ModelAndView ②.ServletAPI 1、通过HttpServletResponse进行输出 2、通过HttpServletResponse实现请求转发 3、通过HttpServletResponse实现重定向 ③.SpringMVC 1.直接输出 2.请求转发 3.重定向 2.ResponseBody响应json数…...
操作系统之文件系统
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
Android SPRD 工模测试修改
设备有两颗led灯,工模测试需全亮 vendor/sprd/proprietories-source/factorytest/testitem/led.cpp -13,6 13,10 typedef enum{#define LED_BLUE "/sys/class/leds/blue/brightness"#define LED_RED …...
C语言与操作系统
学习C语言有助于理解计算机底层原理和操作系统的工作方式 C语言自诞生以来,就与计算机底层操作紧密相连。作为一门高级编程语言,C语言提供了对硬件直接控制的能力,同时保留了结构化编程的特性,这使得它成为编写操作系统、编译器和…...
信息安全管理:网络安全
1 网络的定义和特征 1.1 网络的定义 (根本懒得说。。你们自己wiki吧) 网络的用处 What is a network…Devices in a network…LAN, WAN and InternetworksWhat do networks do for you… Sharing resourcesUse/share applications 1.2 网络的特征 Ch…...
python-leetcode-轮转数组
189. 轮转数组 - 力扣(LeetCode) class Solution:def rotate(self, nums: List[int], k: int) -> None:"""Do not return anything, modify nums in-place instead."""n len(nums)k % n # 如果 k 大于 n,…...
Windows上安装Go并配置环境变量(图文步骤)
前言 1. 本文主要讲解的是在windows上安装Go语言的环境和配置环境变量; Go语言版本:1.23.2 Windows版本:win11(win10通用) 下载Go环境 下载go环境:Go下载官网链接(https://golang.google.cn/dl/) 等待…...
【JS】期约的Promise.all()和 Promise.race()区别
概述 Promise.all() 和 Promise.race() 都是 JavaScript 中处理多个异步操作的 Promise 方法,但它们的行为和返回结果有所不同。 Promise.all()和Promise.race() 1. Promise.all() Promise.all() 接受一个由多个 Promise 实例组成的可迭代对象(例如数…...
【Linux】信号处理
一、Linux系统信号 1、常见的系统信号 常见的Linux系统信号 信号值描述1SIGHUP挂起(hang up)进程2SIGINT中断进(interrupt)程3SIGQUIT停止(stop)进程9SIGKILL无条件终止(terminate)…...
Diffusion Transformer(DiT)——将扩散过程中的U-Net换成ViT:近频繁用于视频生成与机器人动作预测(含清华PAD详解)
前言 本文最开始属于此文《视频生成Sora的全面解析:从AI绘画、ViT到ViViT、TECO、DiT、VDT、NaViT等》 但考虑到DiT除了广泛应用于视频生成领域中,在机器人动作预测也被运用的越来越多,加之DiT确实是一个比较大的创新,影响力大&…...
144:vue+leaflet 使用canvas绘制不同方向、不同颜色的模仿船只三角形
作者: 还是大剑师兰特 ,曾为美国某知名大学计算机专业研究生,现为国内GIS领域高级前端工程师,CSDN知名博主,深耕openlayers、leaflet、mapbox、cesium,canvas,echarts等技术开发,欢迎加微信(gis-dajianshi),一起交流。 查看本专栏目录 - 本文是第 144个示例 文章目录…...
c# 快捷键模块
文章目录 命名空间和类类成员静态成员 静态方法GenerateHotkeyIdWndProcGetWindowHandleAndSourceRegisterUnregister 静态方法(外部调用)RegisterHotKey 和 UnRegisterHotKey 委托HotKeyCallbackHandler 枚举HotkeyModifiers 应用示例 using System; us…...
npm install 安装选项 -d -s -g
在使用 npm install 时,-d、-g 和 -s 是不同的选项,它们分别代表不同的安装模式或行为。以下是它们的详细解释: 1. -d:--save-dev 含义:将包安装为开发依赖(devDependencies)。使用场景&#…...
【每日学点鸿蒙知识】worker线程数量、判断用户是否进行权限决定、图片上传类型错误、request锁释放时机、H5问题
1、HarmonyOS 怎么判断worker线程创建了几个? 因为有数量限制,所以想查询当前的worker数量,避免创建失败,还有,是同时运行的worker数量有限制,还是同一个应用能创建的worker线程有限制 1、查询当前的work…...
0xc0000020错误代码怎么处理,Windows11、10坏图像错误0xc0000020的修复办法
“0xc0000020”是一种 Windows 应用程序错误代码,通常表明某些文件缺失或损坏。这可能是由于系统文件损坏、应用程序安装或卸载问题、恶意软件感染、有问题的 Windows 更新等原因导致的。 比如,当运行软件时,可能会出现类似“C:\xx\xxx.dll …...
智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之7 附件(文档)
为AI聊天工具添加一个知识系统 Part1 人性化&去中心化 前情提要 这一次我们暂时抛开前面对“智能工厂的软件设计”的考虑--其软件智能 产品就是 应用程序。直接将这些思维方式和方法论 运用在其具体应用场景中。本文是其中的一个应用场景。 今天用了 一个新的AI助手工具…...
智能化人才招聘系统是怎样的?
随着企业规模的扩大和业务范围的拓展,人才招聘成为了企业发展的关键环节。然而,市面上的人才招聘系统琳琅满目,质量参差不齐,许多企业发现,并非所有系统都能满足他们的需求,特别是智能化的需求。今天&#…...
memcached的基本使用
memcached是一种基于键值对的内存数据库,一般应用于缓存数据,提高数据访问速度,减轻后端数据库压力。 安装 这里以Ubuntu为例,其他系统安装方法请看官方文档。 sudo apt-get update sudo apt-get install memcached启动 memca…...
【Unity3d】C#浮点数丢失精度问题
一、float、double浮点数丢失精度问题 Unity3D研究院之被坑了的浮点数的精度(一百零三) | 雨松MOMO程序研究院 https://segmentfault.com/a/1190000041768195?sortnewest 浮点数丢失精度问题是由于大部分浮点数在IEEE754规范下就是无法准确以二进制…...
机器学习中回归预测模型中常用四个评价指标MBE、MAE、RMSE、R2解释
在机器学习中,评估模型性能时常用的四个指标包括平均绝对误差(Mean Absolute Error, MAE)、均方误差(Mean Squared Error, MSE)、均方根误差(Root Mean Squared Error, RMSE)和决定系数…...
2412d,d语言中写汇编
原文 嗨,我只是想共享该要点,它展示了如何在ASM中用D编写你好. D中写汇编非常方便!这是我写的: extern(C) int main() {auto hip "hello D\n".ptr;size_t len 8;//write(1,消息,长度)asm {mov RDX, len;//缓冲长度mov RSI, hip;//消息缓冲mov EDI, 1;//Stdout文描…...
急救复试英语口语第一招:confidence
自信与内容是成功的关键 复试是每个考生面临的一道重要关卡,尤其是对于需要进行英语口语测试的同学而言,如何在有限的时间内展示自己的英语能力和综合素质,成为了一个关键问题。今天我们将从两个方面为大家分享应对复试英语口语的技巧&#…...
深入理解 pytest Fixture 方法及其应用
在 Python 自动化测试领域,pytest 是当之无愧的王者。提到 pytest,不得不说它的一大核心功能——Fixture。Fixture 的强大,让复杂的测试流程变得井井有条,让测试代码更加灵活和可复用。 那么,pytest 的 Fixture 究竟是…...
python实现自动登录12306抢票 -- selenium
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 python实现自动登录12306抢票 -- selenium 前言其实网上也出现了很多12306的代码,但是都不是最新的,我也是从网上找别人的帖子,看B站视频&…...
@RestControllerAdvice注解
RestControllerAdvice 是 Spring 4 引入的一个组合注解,它结合了 ControllerAdvice 和 ResponseBody,专门用于处理 RestController 类型的控制器中的全局异常、全局数据绑定和全局模型属性等问题。在 Spring Boot 中,RestControllerAdvice 通…...
04-微服务02
我们将黑马商城拆分为5个微服务: 用户服务 商品服务 购物车服务 交易服务 支付服务 由于每个微服务都有不同的地址或端口,相信大家在与前端联调的时候发现了一些问题: 请求不同数据时要访问不同的入口,需要维护多个入口地址…...
离线语音识别+青云客语音机器人(幼儿园级别教程)
1、使用步骤 确保已安装以下库: pip install vosk sounddevice requests pyttsx3 2、下载 Vosk 模型: 下载适合的中文模型,如 vosk-model-small-cn-0.22。 下载地址: https://alphacephei.com/vosk/models 将模型解压后放置在…...
Llama 3 后训练(三)
目录 4. 后训练 4.1 建模 图表解读 4.1.1 聊天对话格式 4.1.2 奖励建模 4.1.3 监督微调(Supervised Finetuning) 4.1.4 直接偏好优化(Direct Preference Optimization) 4.1.5 模型平均(Model Averaging&#x…...