C++|开源日志库log4cpp和glog
文章目录
- `log4cpp` 和 `glog`对比
- 1. **功能对比**
- 2. **易用性和配置**
- 3. **性能**
- 4. **线程安全**
- 5. **日志输出**
- 6. **功能扩展**
- 7. **适用场景**
- 8. **总结**
- 其它开源C++日志库
- 1. **spdlog**
- 2. **easylogging++**
- 3. **Boost.Log**
- 4. **loguru**
- 5. **Poco Logging**
- 6. **Qt Logging (QDebug)**
- 7. **MinLog**
- 8. **dlog**
- 9. **ZLog**
- 总结
log4cpp
和 glog
对比
log4cpp
和 glog
都是用于 C++ 的日志库,它们在功能、设计理念、易用性等方面有所不同。以下是两者的对比:
1. 功能对比
-
log4cpp:
- 是 Apache 提供的一个日志库,功能较为全面,支持多种日志级别和输出目标。
- 日志级别:支持
TRACE
,DEBUG
,INFO
,WARN
,ERROR
,FATAL
等标准日志级别。 - 输出目标:可以输出日志到文件、控制台、套接字、甚至数据库等多种目标。
- 灵活的配置:支持通过配置文件(XML/Properties 文件)进行配置,使得在运行时能够动态调整日志级别和输出目标。
- 线程安全:内部支持线程安全,确保多线程环境下的日志输出。
- 格式化日志:支持多种日志格式的输出,允许用户自定义日志输出格式。
-
glog (Google Logging):
- 由 Google 提供的日志库,设计简单而高效,主要用于 Google 的大规模系统和服务中。
- 日志级别:支持
INFO
,WARNING
,ERROR
,FATAL
,没有TRACE
等详细级别,适合日常日志和错误日志。 - 输出目标:默认支持输出到控制台和文件,文件输出会分割成多个文件(按日期、大小等),也可以通过自定义方式扩展。
- 配置较为简单:没有像
log4cpp
那样的配置文件支持,配置较为简洁,更多的是通过代码进行配置。 - 线程安全:在多线程环境下支持线程安全的日志记录。
- 支持 fatal 错误:
FATAL
错误会导致程序直接退出,这是glog
特有的设计。
2. 易用性和配置
-
log4cpp:
- 配置较为灵活且复杂,尤其是通过配置文件来控制日志输出,适用于需要频繁调整日志输出设置的项目。
- 支持多个日志输出目标,可以将不同级别的日志输出到不同的文件或控制台。
- 需要引入较多的配置文件,开发者可以通过 XML 或 Properties 文件来灵活配置日志输出。
-
glog:
- 配置较为简单,通过编程接口控制日志级别和输出方式,适合快速集成。
- 不支持配置文件的方式,而是更依赖于代码中的设置,可能不如
log4cpp
灵活。
3. 性能
-
log4cpp:
log4cpp
的性能相对较低,因为它提供了更丰富的功能和配置选项。例如,它的日志分发和多输出目标的处理会稍微增加一些性能开销。- 对于频繁的日志操作,
log4cpp
可能会引入一定的性能瓶颈,尤其是在多线程环境中。
-
glog:
glog
设计上更注重性能,它使用了内存池等优化方式来提升性能。在大规模系统中使用时,其性能表现相对更好。glog
对于日志输出的性能进行了优化,尤其是在多线程环境下表现优秀。
4. 线程安全
-
log4cpp:
log4cpp
是线程安全的,通过加锁机制确保多线程环境下不会发生日志输出冲突。- 不同级别的日志在多线程中有独立的输出,不会互相干扰。
-
glog:
glog
也支持线程安全,并且在多线程环境中表现良好。由于glog
的设计简单且高效,它的线程安全实现没有带来明显的性能损失。
5. 日志输出
-
log4cpp:
- 可以灵活配置日志输出,可以指定输出到控制台、文件、滚动日志、套接字等。
- 通过配置文件可以非常精细地控制哪些日志级别输出到哪些目标。
- 支持日志输出的滚动(例如按大小滚动、按日期滚动等)。
-
glog:
- 默认的输出是控制台和文件,并且具有文件滚动机制(按文件大小或日期)。
glog
自动管理日志文件的切割和存储,适合简单的日志管理。
6. 功能扩展
-
log4cpp:
- 功能较为全面,支持非常多的日志目标、格式和过滤机制。对于一些需要非常灵活日志配置的场景,
log4cpp
是一个不错的选择。
- 功能较为全面,支持非常多的日志目标、格式和过滤机制。对于一些需要非常灵活日志配置的场景,
-
glog:
- 功能相对简单,
glog
的重点是高效和稳定,它支持的功能相对有限,但对于大多数日常使用来说已经足够。 - 不像
log4cpp
那样有多种日志目标的支持,但是可以通过扩展和自定义LogSink
来实现扩展。
- 功能相对简单,
7. 适用场景
-
log4cpp:
- 适合于需要复杂日志配置和多目标日志记录的场景,尤其是在配置和管理日志输出时。
- 用于较为复杂的企业级应用,特别是当日志策略较为复杂时。
-
glog:
- 适合高性能和大规模系统,特别是 Google 系统的日志需求。
- 如果需要一个简单高效的日志库,并且不希望在配置上花费太多时间,
glog
是一个不错的选择。
8. 总结
特性 | log4cpp | glog |
---|---|---|
功能 | 丰富,支持多种日志输出目标和高级配置 | 简单,高效,主要关注性能 |
配置 | 灵活,通过文件进行配置 | 主要通过代码配置 |
线程安全 | 支持,较为传统的实现 | 支持,设计上注重性能,线程安全实现较为高效 |
性能 | 相对较低,特别是多线程场景 | 高效,尤其在多线程场景下,性能优秀 |
日志输出 | 灵活,可输出到多种目标,包括文件、控制台等 | 输出到控制台和文件,支持日志文件切割 |
扩展性 | 强大,支持多种日志目标和格式 | 功能较为简单,但可以通过自定义 LogSink 扩展 |
适用场景 | 需要复杂日志配置和多目标的场景 | 高性能、大规模系统,日志需求较简单的场景 |
选择 log4cpp
还是 glog
取决于您的具体需求。如果您需要复杂的日志管理和高度的灵活性,log4cpp
可能更合适;如果您优先考虑性能和简洁的日志配置,glog
会是一个更好的选择。
其它开源C++日志库
除了 log4cpp
和 glog
,还有很多其他开源的 C++ 日志库,以下是一些常见的开源 C++ 日志库及其特点:
1. spdlog
-
简介:
spdlog
是一个非常高效的 C++ 日志库,它支持多种日志输出方式(控制台、文件等),并且具有非常高的性能,适合大规模系统。 -
特点:
- 非常高效,性能非常好,适用于需要高性能日志的场景。
- 支持多种日志级别(
trace
,debug
,info
,warn
,error
,critical
)。 - 支持日志文件滚动(按大小、按日期等)。
- 支持异步日志(可以配置异步日志输出以提高性能)。
- 支持多种格式化方式,支持日志前缀和时间戳。
- 支持自定义输出目标,灵活扩展。
- 轻量级,简单易用。
-
适用场景:需要高效、轻量级且线程安全的日志记录系统。
-
项目链接:spdlog GitHub
2. easylogging++
-
简介:
easylogging++
是一个跨平台的 C++ 日志库,简单易用,并且提供了一些非常强大的功能,如日志文件自动滚动、线程安全等。 -
特点:
- 配置灵活,支持通过代码配置和通过配置文件配置。
- 支持文件日志的自动滚动。
- 支持多线程环境,线程安全。
- 支持多种日志格式,可以自定义日志格式。
- 支持将日志输出到多个目标,如控制台、文件、syslog 等。
- 提供了丰富的日志级别和日志过滤机制。
-
适用场景:需要简单易用、功能强大的 C++ 日志库。
-
项目链接:easylogging++ GitHub
3. Boost.Log
-
简介:
Boost.Log
是 Boost 库的一部分,提供了一套完整的日志记录框架,功能强大且灵活,但使用上相对复杂。 -
特点:
- 完全支持多线程环境,支持异步日志记录。
- 支持日志的灵活格式化、过滤和输出。
- 支持自定义日志级别,支持日志的分割、归档等功能。
- 支持各种日志输出方式(文件、控制台等)。
- 集成到 Boost 库中,具有高度的模块化和扩展性。
-
适用场景:适用于大型项目,特别是那些已经在使用 Boost 库的项目。
-
项目链接:Boost.Log 官方文档
4. loguru
-
简介:
loguru
是一个轻量级的 C++ 日志库,旨在简化日志记录的配置和使用,支持多种输出格式和输出目标。 -
特点:
- 使用简单,配置少,易于集成到现有项目中。
- 支持多种日志级别,如
INFO
,WARNING
,ERROR
,FATAL
。 - 支持将日志输出到多个目标(如控制台、文件)。
- 自动记录日志行号、函数名等信息。
- 支持多线程环境。
- 支持日志文件自动滚动。
-
适用场景:适合需要简单配置和易用性的日志库,适用于快速集成到项目中。
-
项目链接:loguru GitHub
5. Poco Logging
-
简介:
Poco Logging
是Poco
库的一部分,提供了丰富的日志功能,适用于大规模系统,具有较高的灵活性。 -
特点:
- 完整的日志功能,支持日志过滤、日志级别、日志格式等。
- 支持将日志输出到多个目标(控制台、文件、数据库等)。
- 支持异步日志。
- 支持多线程,线程安全。
- 适合与
Poco
的其他模块(如网络、数据库等)一起使用。
-
适用场景:需要全面日志功能,尤其是在使用
Poco
库的项目中。 -
项目链接:Poco GitHub
6. Qt Logging (QDebug)
-
简介:
Qt
框架提供了自带的日志记录工具,QDebug
类用于调试和日志记录,适合与 Qt 项目结合使用。 -
特点:
- 支持多种输出方式,默认输出到控制台。
- 支持自定义输出格式。
- 易于与 Qt 应用程序集成。
- 不支持独立配置或外部日志目标,但非常适合于 Qt 项目中。
-
适用场景:主要适用于使用 Qt 框架的应用程序,尤其是调试和开发阶段。
-
项目链接:Qt Logging Documentation
7. MinLog
-
简介:
MinLog
是一个轻量级、简单易用的日志库,适用于嵌入式或小型项目。 -
特点:
- 非常轻量,没有复杂的配置和依赖。
- 提供日志级别和简单的输出功能。
- 适合嵌入式系统或小型项目,资源有限的环境中使用。
-
适用场景:嵌入式系统或需要轻量级日志库的小型项目。
-
项目链接:MinLog GitHub
8. dlog
-
简介:
dlog
是一个 C++ 日志库,旨在提供高效、简单的日志功能,支持异步日志和多目标输出。 -
特点:
- 高效的异步日志记录,能够减少主线程的负担。
- 支持多种日志级别和日志目标(文件、控制台等)。
- 支持日志文件的自动切割和归档。
-
适用场景:高性能、需要异步日志的项目。
-
项目链接:dlog GitHub
9. ZLog
-
简介:
ZLog
是一个轻量级的 C++ 日志库,注重性能和易用性,适合嵌入式和小型应用。 -
特点:
- 轻量级设计,性能优越。
- 支持多种日志级别和输出格式。
- 可以通过代码配置和调整日志级别。
-
适用场景:嵌入式、需要轻量级和高性能日志的项目。
-
项目链接:ZLog GitHub
总结
不同的 C++ 日志库适用于不同的场景:
- 如果需要 高性能 和 高效的异步日志,可以选择
spdlog
或loguru
。 - 如果项目已经使用了 Boost,
Boost.Log
是一个非常合适的选择。 - 如果需要更 全面的功能,如日志分割、归档等,可以选择
easylogging++
或Poco Logging
。 - 对于 Qt 项目,使用 Qt 自带的
QDebug
会是最方便的选择。 - 如果需要一个 轻量级的 解决方案,
MinLog
或ZLog
是不错的选择。
根据你的需求(性能、功能、配置灵活性、平台支持等)来选择合适的日志库。
相关文章:
C++|开源日志库log4cpp和glog
文章目录 log4cpp 和 glog对比1. **功能对比**2. **易用性和配置**3. **性能**4. **线程安全**5. **日志输出**6. **功能扩展**7. **适用场景**8. **总结** 其它开源C日志库1. **spdlog**2. **easylogging**3. **Boost.Log**4. **loguru**5. **Poco Logging**6. **Qt Logging (…...
安卓程序作为web服务端的技术实现(三):AndServer作为服务
安卓程序作为web服务端的技术实现:AndServer 实现登录权限拦截-CSDN博客 安卓程序作为web服务端的技术实现(二):Room 实现数据存储-CSDN博客 经过两次捣鼓 AndServer已经能正常访问了 但是发现一个问题 就是当我app退出时 AndSe…...
数据结构(Java)——二叉树
1.概念 二叉树是一种树形数据结构,其中每个节点最多有两个子节点,通常被称为左子节点和右子节点。二叉树可以是空的(即没有节点),或者由一个根节点以及零个或多个左子树和右子树组成,其中左子树和右子树也分…...
深度学习系列76:流式tts的一个简单实现
1. 概述 使用queue,producer不断向queue中添加audio,然后consumer不断从queue中消费audio。 下面的样例使用melo来生成语音,需要先下载melo.tts。模型在https://myshell-public-repo-hosting.s3.amazonaws.com/openvoice/basespeakers/ZH/ch…...
数据结构(三) 排序/并查集/图
目录 1. 排序 2.并查集 3.图 1.排序: 1.1 概念: 排序就是将数据按照某种规则进行排列, 具有某种顺序. 分为内排序和外排序. 内排序就是: 将数据放在内存中的排序; 外排序是: 数据太多无法在内存中排序的. 1.2 插入排序: 插入排序包含: 直接插入排序和希尔排序. (1) 直接插入…...
WPA Supplicant 技术详解
目录 前言 1. 简介 2. 源码获取 3. 代码架构 3.1 模块结构 3.2. 主要文件和目录 3.3. 顶层模块 3.4 模块之间的关系 4. 工作流程简要描述 启动 加载配置 初始化 认证 数据传输 5. 编译与安装 5.1 编译 5.1.1 libnl库与openssl库准备 5.1.2 修改配置文件 5.…...
Avalonia UI MVVM DataTemplate里绑定Command
Avalonia 模板里面绑定ViewModel跟WPF写法有些不同。需要单独绑定Command. WPF里面可以直接按照下面的方法绑定DataContext. <Button Content"Button" Command"{Binding DataContext.ClickCommand, RelativeSource{RelativeSource AncestorType{x:Type User…...
macOS如何进入 Application Support 目录(cd: string not in pwd: Application)
错误信息 cd: string not in pwd: Application 表示在当前目录下找不到名为 Application Support 的目录。可能的原因如下: 拼写错误或路径错误:确保你输入的目录名称正确。目录名称是区分大小写的,因此请确保使用正确的大小写。正确的目录名…...
【探索 Kali Linux】渗透测试与网络安全的终极操作系统
探索 Kali Linux:渗透测试与网络安全的终极操作系统 在网络安全领域,Kali Linux 无疑是最受欢迎的操作系统之一。无论是专业的渗透测试人员、安全研究人员,还是对网络安全感兴趣的初学者,Kali Linux 都提供了强大的工具和灵活的环…...
《SwinIR:使用Swin-Transformer图像恢复》学习笔记
paper:2108.10257 GitHub:GitHub - JingyunLiang/SwinIR: SwinIR: 使用 Swin Transformer 进行图像修复 (官方仓库) 目录 摘要 1、Introduction 2、Related Work 2.1 图像修复 2.2 视觉Transformer…...
AR智慧点巡检系统探究和技术方案设计
一、项目背景 随着工业生产规模的不断扩大和设备复杂度的提升,传统的人工点巡检方式效率低下、易出错,难以满足现代化企业对设备运行可靠性和安全性的要求。AR(增强现实)技术的发展为点巡检工作带来了新的解决方案,通…...
电路研究9.2——合宙Air780EP使用AT指令
这里正式研究AT指令的学习了,之前只是接触的AT指令,这里则是深入分析AT指令了。 软件的开发方式: AT:MCU 做主控,MCU 发 AT 命令给模组的开发方式,模组仅提供标准的 AT 固件, 所有的业务控制逻辑…...
OpenCV相机标定与3D重建(62)根据两个投影矩阵和对应的图像点来计算3D空间中点的坐标函数triangulatePoints()的使用
加粗样式- 操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 这个函数通过使用立体相机对3维点的观测,重建这些点的三维坐标(以齐次坐标表示)。 cv::triangula…...
基于ollama,langchain,springboot从零搭建知识库四【设计通用rag系统】
需求: 1:可以自定义管理大模型,可自行选择ollama,openai,千问等大模型 2:自定义向量数据库,支持pgvector,elasticsearch,milvus(这三个目前比较常用ÿ…...
【Go面试】工作经验篇 (持续整合)
这里写目录标题 什么是逃逸分析服务端怎么接受客户端上传的文件说一下对gin框架的理解gin有哪些常用中间件gin怎么用swagger写接口文档nginx一般是用来做什么如果调用方法经常超时怎么办gin中怎么和mysql通信从mysql调数据到redis,如何同步延时双删redis ,mysql都不存在用户请求…...
“腾讯、钉钉、飞书” 会议开源平替,免费功能强大
在数字化时代,远程办公和线上协作越来越火。然而,市面上的视频会议工具要么贵得离谱,要么功能受限,甚至还有些在数据安全和隐私保护上让人不放心。 今天开源君给大家安利一个超棒的开源项目 - Jitsi Meet,这可是我在网…...
怎样使用树莓派自己搭建一套ADS-B信号接收系统
0 我们知道,ADS-B全称广播式自动相关监视系统,其实就是飞机发出的广播信号,用明码来对外发送自己的位置、高度、速度、航向等信息,是公开信息。连续接收到一架飞机发出的ADS-B信息后,可以通过其坐标点来描绘出飞机的航…...
终极的复杂,是简单
软件仿真拥有最佳的信号可见性和调试灵活性,能够高效捕获很多显而易见的常见错误,被大多数工程师熟练使用。 空间领域应用的一套数据处理系统(Data Handling System),采用抗辐FPGA作为主处理器,片上资源只包含10752个寄存器,软仿也是个挺花时间的事。 Few ms might take …...
粒子群算法 笔记 数学建模
引入: 如何找到全局最大值:如果只是贪心的话,容易被局部最大解锁定 方法有:盲目搜索,启发式搜索 盲目搜索:枚举法和蒙特卡洛模拟,但是样例太多花费巨量时间 所以启发式算法就来了,通过经验和规…...
Vue.js 嵌套路由和动态路由
Vue.js 嵌套路由和动态路由 在 Vue.js 开发中,Vue Router 是官方提供的路由管理器,用于构建单页应用(SPA)。它支持嵌套路由和动态路由,帮助开发者构建复杂的应用结构。 嵌套路由 嵌套路由允许在路由配置中定义子路由…...
Docker导入镜像
使用命令行进行处理: docker load < onething1_wxedge.tar如下图所示 查看状态 docker images...
C# OpenCV机器视觉:红外体温检测
在一个骄阳似火的夏日,全球却被一场突如其来的疫情阴霾笼罩。阿强所在的小镇,平日里熙熙攘攘的街道变得冷冷清清,人们戴着口罩,行色匆匆,眼神中满是对病毒的恐惧。阿强作为镇上小有名气的科技达人,看着这一…...
STM32项目分享:智能厨房安全检测系统
目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 PCB图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: STM32智能厨房安全检测系统 (资料分…...
docker 安装 redis 详解
在平常的开发工作中,我们经常会用到 redis,那么 docker 下应该如何安装 redis 呢?简单来说:第一步:拉取redis镜像;第二步:设置 redis.conf 配置文件;第三步:编写 docker-…...
《探秘鸿蒙Next:人工智能助力元宇宙高效渲染新征程》
在元宇宙的宏大愿景中,高效的渲染技术是构建沉浸式虚拟世界的关键。鸿蒙Next凭借与人工智能的深度融合,为元宇宙的渲染带来了全新的解决方案和无限可能。 智能场景分析与优化 人工智能能够对元宇宙场景进行智能分析。鸿蒙Next可以利用AI技术对场景中的…...
nginx分发请求超时切换服务
nginx的upstream模块实现超时自动切换服务 upstream testfail {server 192.168.1.218 max_fails1 fail_timeout10s;server 192.168.1.129 max_fails1 fail_timeout10s;} max_fails代表失败尝试次数,达到设置的次数则视为该服务不可用, fail_timeout代…...
vulfocus/fastjson-cnvd_2017_02833复现
漏洞概述 Fastjson 是阿里巴巴开发的一个高性能的 Java 库,用于将 Java 对象转换成 JSON 格式(序列化),以及将 JSON 字符串转换回 Java 对象(反序列化)。 fastjson在解析json的过程中,支持使用type字段来指…...
.Net Core微服务入门全纪录(五)——Ocelot-API网关(下)
系列文章目录 1、.Net Core微服务入门系列(一)——项目搭建 2、.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上) 3、.Net Core微服务入门全纪录(三)——Consul-服务注…...
OpenCV imread函数读取图像__实例详解
OpenCV imread函数读取图像__实例详解 本文目录: 零、时光宝盒 一、imread函数定义 二、imread函数支持的文件格式 三、imread函数flags参数详解 (3.1)、Flags-1时,样返回加载的图像(使用alpha通道,否…...
GPSd定时检测保活TCP GPS源
为了在 TCP GPS 源丢失连接时自动重新连接,可以编写一个监控脚本,定期检查 gpspipe 输出中的 TCP 源数据是否存在。如果检测到丢失,则使用 gpsdctl 或直接命令重新添加 TCP 源。 1、工具 检查并安装必要工具,本例需要使用 gpspi…...
得物App亮相第七届进博会,科技赋能打造消费新热点
在2024年11月5日至11月10日举办的第七届进博会舞台上,上海交易团虹口分团表现亮眼,其中得物作为来自虹口品质电商的践行者,备受众多参观者关注。 上海得物信息集团有限公司自2015年于上海虹口创立以来,始终坚守“满足年轻人对美好…...
单片机内存管理剖析
一、概述 在单片机系统中,内存资源通常是有限的,因此高效的内存管理至关重要。合理地分配和使用内存可以提高系统的性能和稳定性,避免内存泄漏和碎片化问题。单片机的内存主要包括程序存储器(如 Flash)和数据存储器&a…...
用Python绘制一只懒羊羊
目录 一、准备工作 二、Turtle库简介 三、绘制懒羊羊的步骤 1. 导入Turtle库并设置画布 2. 绘制头部 3. 绘制眼睛 4. 绘制嘴巴 5. 绘制身体 6. 绘制四肢 7. 完成绘制 五、运行代码与结果展示 六、总结 在这个趣味盎然的技术实践中,我们将使用Python和Turtle图形…...
Python 预训练:打通视觉与大语言模型应用壁垒——Python预训练视觉和大语言模型
大语言模型是一种由包含数百亿甚至更多参数的深度神经网络构建的语言模型,通常使用自监督学习方法通过大量无标签文本进行训练,是深度学习之后的又一大人工智能技术革命。 大语言模型的发展主要经历了基础模型阶段(2018 年到2021年)、能力探索阶段(2019年…...
神经网络梯度爆炸的原因及解决方案
在深度学习中,梯度爆炸(gradient exploding)是一种常见的训练问题,尤其是在深层神经网络中。梯度爆炸指的是在反向传播过程中,梯度值呈指数级增长,导致网络权重的大幅更新,从而使得网络变得不稳…...
WPS不登录无法使用基本功能的解决方案
前言 WPS不登录无法使用基本功能的原因通常是为了同步数据、提供更多高级功能或满足软件授权要求。然而,一些用户可能出于隐私或便捷性的考虑,不愿意登录账号。在这种情况下,WPS可能会限制未登录用户的使用权限,导致工具栏变灰…...
蓝桥杯lesson3---string的使用
🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” string的概念 string字符串是一种更加高级的封装,string字符串中包含了大量的方法,这些方法使得字符串的操作变得更加简单,string的使用&…...
Java设计模式 三 工厂方法模式 (Factory Method Pattern)
工厂方法模式 (Factory Method Pattern) 是一种常见的创建型设计模式,旨在通过定义一个接口来创建对象,而将实例化对象的具体类延迟到子类中。工厂方法模式允许客户端通过工厂方法来创建对象,而不需要直接调用构造函数,这样可以减…...
日志收集Day005
1.filebeat的input类型之filestream实战案例: 在7.16版本中已经弃用log类型,之后需要使用filebeat,与log不同,filebeat的message无需设置就是顶级字段 1.1简单使用: filebeat.inputs: - type: filestreamenabled: truepaths:- /tmp/myfilestream01.lo…...
java开发,IDEA转战VSCODE配置(mac)
一、基本java开发环境配置 前提:已经安装了jdk、maven、vscode,且配置了环境变量 1、安装java相关的插件 2、安装spring相关的插件 3、vscode配置maven环境 打开 VsCode -> 首选项 -> 设置,也可以在setting.json文件中直接编辑&…...
Effective C++读书笔记——item23(用非成员,非友元函数取代成员函数)
一、主要观点: 在某些情况下,使用 non-member、non-friend 函数来替换 member 函数可以增强封装性和可扩展性,提供更好的软件设计。 二、详细解释: 封装性: 类成员函数的封装性考量:成员函数可以访问类的…...
(3)STM32 USB设备开发-USB存储设备
例程:STM32USBdevice: 基于STM32的USB设备例子程序 - Gitee.com 本篇为使用芯片内部flash作为USB存储设备的例程,没有知识,全是实操,按照步骤就能获得一个STM32的U盘。本例子是在野火F103MINI开发板上验证的,如果代码…...
考研408笔记之数据结构(五)——图
数据结构(五)——图 1. 图的基本概念 1.1 图的定义 1.2 有向图和无向图 在有向图中,使用圆括号表示一条边,圆括号里元素位置互换没有影响。 在无向图中,使用尖括号表示一条边,尖括号里元素位置互换则表示…...
【博客之星】年度总结:在云影与墨香中探寻成长的足迹
🐇明明跟你说过:个人主页 🔖行路有良友,便是天堂🔖 目录 一、年度回顾 1、创作历程 2、个人成长 3、个人生活与博客事业 二、技术总结 1、赛道选择 2、技术工具 3、实战项目 三、前景与展望 1、云原生未来…...
springboot 调用 c++生成的so库文件
一、创建c文件 SoTest.h #pragma once class SoTest {int Add(int a,int b); };SoTest.cpp #include "SoTest.h"int SoTest::Add(int a, int b) {return a b; }二、创建so文件 /home/ubuntu/projects/SoTest/bin/x64/Debug/libSoTest.so 三、java代码 Maven依…...
简识JVM栈帧中的操作数栈
在JVM(Java虚拟机)中,栈帧(Stack Frame)是方法执行时的数据结构,用于存储局部变量、操作数栈、方法返回地址等信息。 其中,操作数栈(Operand Stack)是栈帧中的一个重要组…...
在 Kubernetes 上快速安装 KubeSphere v4.1.2
目录标题 安装文档配置repo安装使用插件 安装文档 在 Kubernetes 上快速安装 KubeSphere 配置repo export https_proxy10.10.x.x:7890 helm repo add stable https://charts.helm.sh/stable helm repo update安装 helm upgrade --install -n kubesphere-system --create-name…...
腾讯 Hunyuan3D-2: 高分辨率3D 资产生成
腾讯 Hunyuan3D-2:高分辨率 3D 资产生成的突破 前言 在当今数字化时代,3D 资产生成技术正变得越来越重要。无论是游戏开发、影视制作还是虚拟现实领域,高质量的 3D 模型和纹理都是创造沉浸式体验的关键。然而,传统的 3D 资产制作…...
论文阅读--Qwen22.5技术报告
Qwen2 1 引言 所有模型都是在超过7 trillion token(7万亿)的高质量、大规模数据集上预训练的 2 Tokenizer & Model 2.1 Tokenizer 沿用Qwen(Bai等人,2023a)的做法,我们采用了基于字节级字节对编码…...
python如何导出数据到excel文件
python导出数据到excel文件的方法: 1、调用Workbook()对象中的add_sheet()方法 wb xlwt.Workbook() ws wb.add_sheet(A Test Sheet) 2、通过add_sheet()方法中的write()函数将数据写入到excel中,然后使用save()函数保存excel文件 ws.write(0, 0, 1234…...