1. 项目概述
在嵌入式系统和资源受限环境中,一个轻量级、跨平台的日志模块往往是项目调试和问题排查的关键工具。虽然市面上已有成熟的日志库如glog、spdlog等,但它们通常体积庞大、依赖复杂,不太适合小型项目或嵌入式场景。本文将分享一个仅需单个C文件实现的跨平台日志模块,它具备完整的日志功能却保持极简设计。
这个日志模块的核心特点包括:
- 纯C实现,零外部依赖(除标准库外)
- 支持Windows/Linux/macOS多平台
- 多级日志输出(DEBUG/INFO/WARN/ERROR等)
- 智能文件切割(默认10MB触发)
- 自动清理旧日志(保留最近10个文件)
- 线程安全的缓冲写入机制
- 小于500行代码的极简实现
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心设计思路
2.1 平台兼容性设计
跨平台开发的首要挑战是处理不同操作系统的API差异。我们通过条件编译和宏定义来封装平台相关代码:
c复制#if defined(_WIN32) || defined(_WIN64)
#include <io.h>
#include <direct.h>
#include <windows.h>
#define ACCESS(fileName, accessMode) _access(fileName, accessMode)
#define MKDIR(path) _mkdir(path)
#else
#include <unistd.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <dirent.h>
#define ACCESS(fileName, accessMode) access(fileName, accessMode)
#define MKDIR(path) mkdir(path, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH)
#endif
这种设计模式使得上层业务代码可以完全不用关心底层平台差异。例如创建目录时只需调用MKDIR()宏,在Windows下会自动转换为_mkdir(),而在Linux下则对应mkdir()。
2.2 日志等级划分
参考syslog标准,我们实现了8个日志级别:
| 等级宏 | 数值
