microLog:专为嵌入式与高可靠场景打造的高性能日志库
3 亿条日志验证,270 万条/秒持久化写入,AES256 加密损耗 < 3%
一、引言:嵌入式日志的困境
在嵌入式 Linux 设备、工业网关、车机、医疗设备等场景中,日志系统面临独特的挑战:
- 磁盘写满:日志无限增长导致系统崩溃,在无人值守设备中屡见不鲜
- 掉电风险:异步日志可能丢失关键数据,排查问题无从下手
- Flash 寿命:频繁擦写缩短存储寿命,设备过早失效
- 数据安全:敏感日志需加密存储,但现有方案性能损失严重
- 性能瓶颈:通用日志库过于臃肿,在资源受限设备上力不从心
microLog 正是为解决这些问题而设计。
二、性能数据:用数字说话
测试环境 以上数据反映的是该库在现代高性能主机上的软件栈极限。在嵌入式平台(如 ARM + eMMC)上,实际吞吐受限于 Flash 物理带宽。
测试环境: WSL2
设备名称 USER-20260105RT
处理器 Intel(R) Core(TM) i7-14700HX (2.30 GHz)
机带 RAM 32.0 GB (31.8 GB 可用)
图形卡 NVIDIA GeForce RTX 4090 (16 GB)
存储 已使用 932 GB 中的 364 GB
内存详情
内存1名称 4800 MHz
厂商 JUHOR
大小 16 GB
频率 4800 MHz
插槽 Controller0-ChannelA-DIMM0
数据宽度 64
内存2名称 4800 MHz
厂商 JUHOR
大小 16 GB
频率 4800 MHz
插槽 Controller1-ChannelA-DIMM0
数据宽度 64
经过 3 亿条日志的极限验证,microLog 的核心后端表现如下:
| 后端 | 吞吐量 | 延迟 | 持久化 | 加密 |
|---|---|---|---|---|
| LOCAL | 271 万条/秒 | 0.37 µs | ✅ msync 强制落盘 | ❌ |
| localCrypto | 264 万条/秒 | 0.38 µs | ✅ msync 强制落盘 | ✅ AES256 |
| SQLite3 | 4.9 万条/秒 | 20.4 µs | ✅ 事务 | ❌ |
| MySQL | 3.6 万条/秒 | 27.8 µs | ✅ 事务 | ❌ |
加密损耗 < 3% ------ 这是目前已知的、AES256 日志加密的最低性能损耗。
三、与主流竞品对比
1. 性能对比(异步持久化类别)
| 日志库 | 吞吐量 | 业务线程阻塞? | 持久化保证? |
|---|---|---|---|
| microLog LOCAL | 271 万条/秒 | ❌ 否 | ✅ 强制 |
| spdlog 异步 | ~58 万~100 万条/秒 | ❌ 否 | ⚠️ 队列策略可能丢失 |
| NanoLog 保证模式 | ~82 万条/秒 | ❌ 否 | ✅ 可配置 |
| glog | ~1 万~10 万条/秒 | ✅ 是 | ✅ 强制 |
2. 功能对比(microLog vs. spdlog)
| 功能 | microLog | spdlog |
|---|---|---|
| 异步非阻塞 | ✅ | ✅ |
| 定长循环文件 | ✅ 原生支持 | ❌ |
| 磁盘写满保护 | ✅ 永不写满 | ❌ (依赖轮转配置) |
| AES256 加密 | ✅ 原生支持,损耗 < 3% | ❌ (需自行扩展) |
| 嵌入式 Flash 友好 | ✅ | ❌ |
| 零核心依赖 | ✅ | ❌ (依赖 fmt) |
| 多后端支持 | ✅ (9 种) | ✅ |
四、核心设计:为何如此高效?
1. 定长循环文件 ------ 永不磁盘满
- 文件大小在初始化时固定
- 新日志循环覆盖最旧记录
- 从根本上消除磁盘写满风险
2. mmap 零拷贝 + 双缓冲 ------ 极致写入速度
- 写入操作变为内存拷贝,系统调用次数趋近于零
- 前台写入与后台落盘完全并行,业务线程永不阻塞
3. AES256 批量加密 ------ 安全近乎免费
- 对缓冲区一次性加密,而非逐条加密
- 自动利用 AES-NI 硬件加速
- 加密损耗仅 2.6%,实测 264 万条/秒
4. msync(MS_SYNC) 强制落盘 ------ 掉电安全
- 每次缓冲区切换都强制同步到物理存储
- 不依赖操作系统异步写回,确保数据可靠
5. 丰富的后端支持
- 本地存储:LOCAL、localCrypto(AES256 加密)
- 网络传输:UDP、TCP
- 进程通信:PIPE、UnixSocket
- 数据库:SQLite3、MySQL、PostgreSQL
五、典型应用场景
- 工业网关 / 数据采集器:长期无人值守,磁盘写满保护是关键
- 车机 / 车载设备:掉电安全 + Flash 寿命保护
- 医疗设备:AES256 加密,满足合规要求
- 边缘计算节点:资源受限,零依赖,极致轻量
- 高频交易日志:微秒级延迟,不影响业务线程
- 集中式日志系统:MySQL/SQLite3 后端,结构化存储
六、快速上手
cpp
#include "log.hpp"
// 1. 本地高性能日志(定长循环 + mmap + 双缓冲)
auto log = tinyLog::createLog<tinyLogType::LOCAL>("/var/log/app.log", 100000, 2048);
log->info("系统启动,版本: %s", "v1.0.0");
// 2. AES256 加密日志(安全存储,损耗 < 3%)
auto secure = tinyLog::createLog<tinyLogType::localCrypto>("/var/log/secure.log", 100000, 2048);
secure->info("用户登录: %s", username);
// 3. MySQL 集中式日志(多值插入 + 双连接 + 批量事务)
auto db = tinyLog::createLog<tinyLogType::MYSQL>("localhost", 3306, "logs", "user", "pass");
db->error("数据库连接失败: %s", reason);
// 4. 终端调试
auto debug = tinyLog::createLog<tinyLogType::TERMINAL>();
debug->warn("CPU 使用率: %d%%", cpu_usage);
七、编译与部署
bash
# 本地编译
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build .
# ARM 交叉编译(仅需修改工具链)
cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/arm-linux-gnueabihf.cmake
零核心依赖:核心模块仅依赖 C++ 标准库,无需额外安装任何第三方库。
八、项目信息
- 语言:C++11
- 许可证:MIT
- gitee:https://gitee.com/galaxy_0/micro-log.git
九、总结
microLog 是专为嵌入式与高可靠场景打造的高性能日志库:
- 性能顶尖:271 万条/秒持久化写入,与 spdlog 异步模式并驾齐驱
- 加密领先:AES256 加密损耗 < 3%,行业首创的"免费加密"
- 可靠性强:定长循环文件,永不磁盘满;msync 强制落盘,掉电安全
- 嵌入式友好:零核心依赖,资源占用可控,ARM 平台完美支持
- 功能全面:9 种后端,覆盖本地、网络、数据库全场景
microLog 不是另一个 spdlog,而是对嵌入式和高可靠场景的深度思考与针对性设计。
立即体验 microLog,让日志记录不再成为系统的负担。 🚀