基于 spdlog 封装的C++单例日志库,提供简单易用的日志记录功能。
- 🚀 单头文件设计 - 只需包含一个
XLogger.hpp文件即可使用 - 🎯 单例模式 - 全局唯一的日志实例,线程安全
- 📁 多种输出方式 - 支持控制台输出和文件输出
- 🔄 日志轮转 - 支持按大小和按日期轮转日志文件
- 📊 多级别日志 - 支持 TRACE、DEBUG、INFO、WARN、ERROR、CRITICAL 级别
- ⚡ 高性能 - 基于 spdlog 的异步日志记录
- 🛠️ 易于配置 - 提供丰富的配置选项
XLogger/
├── XLogger.hpp # 单头文件日志库
├── third_party/
│ └── spdlog/ # spdlog 子模块
├── .gitmodules # Git 子模块配置
└── README.md # 项目说明文档
git clone https://github.com/shenxuebing/XLogger
cd XLogger
git submodule update --init --recursive#include "XLogger.hpp"
int main() {
// 配置日志
XLogger::setLogPath("./logs"); // 设置日志文件路径
XLogger::setLogPrefixName("app"); // 设置日志文件前缀
XLogger::setLogLevel("info"); // 设置日志级别
XLogger::setLogConsole(true); // 启用控制台输出
// 使用日志宏
XLOG_INFO("应用程序启动");
XLOG_DEBUG("调试信息: {}", 123);
XLOG_WARN("警告信息: {}", "内存使用率较高");
XLOG_ERROR("错误信息: {}", "文件读取失败");
return 0;
}| 方法 | 说明 | 示例 |
|---|---|---|
setLogPath(path) |
设置日志文件保存路径 | setLogPath("./logs") |
setLogPrefixName(name) |
设置日志文件前缀名 | setLogPrefixName("app") |
setLogLevel(level) |
设置日志级别 | setLogLevel("info") |
setLogConsole(enable) |
启用/禁用控制台输出 | setLogConsole(true) |
setLogMaxFiles(count) |
设置最大日志文件数量 | setLogMaxFiles(30) |
setLogMaxSize(size) |
设置单个日志文件最大大小(MB) | setLogMaxSize(10) |
| 级别 | 数值 | 说明 |
|---|---|---|
off |
-1 | 关闭日志 |
trace |
0 | 跟踪级别(最详细) |
debug |
1 | 调试级别 |
info |
2 | 信息级别 |
warn |
3 | 警告级别 |
error |
4 | 错误级别 |
critical |
5 | 严重错误级别 |
| 宏 | 说明 | 示例 |
|---|---|---|
XLOG_TRACE(...) |
跟踪级别日志 | XLOG_TRACE("函数调用: {}", func_name) |
XLOG_DEBUG(...) |
调试级别日志 | XLOG_DEBUG("变量值: {}", value) |
XLOG_INFO(...) |
信息级别日志 | XLOG_INFO("操作完成") |
XLOG_WARN(...) |
警告级别日志 | XLOG_WARN("性能警告") |
XLOG_ERROR(...) |
错误级别日志 | XLOG_ERROR("操作失败: {}", error_msg) |
XLOG_CRITICAL(...) |
严重错误日志 | XLOG_CRITICAL("系统崩溃") |
XLOG_BEGIN |
函数开始标记 | XLOG_BEGIN |
XLOG_END |
函数结束标记 | XLOG_END |
XLOG_MEMHEX(data, len) |
内存十六进制输出 | XLOG_MEMHEX(buffer, 100) |
- C++11 或更高版本
注意: 示例程序 file_logging_example 在 C++11 环境下不会自动列出日志文件目录,需要手动查看 ./logs 目录中的 .log 文件。
默认行为:
- 定义了
_DEBUG宏(Debug 构建)时,默认输出到控制台。 - 未定义
_DEBUG(Release 构建)时,默认输出到文件。 - 可随时通过
XLogger::setLogConsole(true/false)覆盖默认行为。
| 选项 | 默认值 | 说明 |
|---|---|---|
XLOGGER_ENABLE_CONFIG |
OFF |
启用从 INI 配置文件读取日志设置 |
启用配置文件支持:
cmake -DXLOGGER_ENABLE_CONFIG=ON ..启用后,XLogger 会在构造时尝试从 defConf.ini 读取以下配置:
logLevel- 日志级别logPath- 日志文件路径logMaxSize- 单个日志文件最大大小(MB)
本项目使用 Git 子模块方式引入 spdlog 库。
# 更新到最新版本
git submodule update --remote third_party/spdlog
# 或者更新所有子模块
git submodule update --remote#include "XLogger.hpp"
int main() {
// 配置日志
XLogger::setLogPath("./logs");
XLogger::setLogLevel("info");
XLogger::setLogConsole(true);
// 使用日志宏
XLOG_INFO("应用程序启动");
XLOG_DEBUG("调试信息: {}", 123);
XLOG_WARN("警告信息: {}", "内存使用率较高");
XLOG_ERROR("错误信息: {}", "文件读取失败");
return 0;
}#include "XLogger.hpp"
void testNumericLevels() {
// 使用数值设置级别
XLogger::setLogLevel(2); // info级别
XLOG_INFO("这条日志会显示");
XLOG_DEBUG("这条日志不会显示");
XLogger::setLogLevel(4); // error级别
XLOG_ERROR("这条日志会显示");
XLOG_WARN("这条日志不会显示");
}#include "XLogger.hpp"
void processData(const std::string& data) {
XLOG_BEGIN
XLOG_INFO("开始处理数据,长度: {}", data.length());
try {
// 处理逻辑
XLOG_DEBUG("数据处理中...");
XLOG_INFO("数据处理完成");
} catch (const std::exception& e) {
XLOG_ERROR("数据处理失败: {}", e.what());
throw;
}
XLOG_END
}#include "XLogger.hpp"
void debugMemory() {
unsigned char buffer[256];
// 填充一些数据
for (int i = 0; i < 256; ++i) {
buffer[i] = i % 256;
}
// 输出内存内容
XLOG_MEMHEX(buffer, 64); // 输出前64字节的十六进制
}#include "XLogger.hpp"
int main() {
// 启用配置文件支持(需要在CMake中设置 -DXLOGGER_ENABLE_CONFIG=ON)
#ifdef XLOGGER_ENABLE_CONFIG
// 指定配置文件路径(默认为 defConf.ini)
XLogger::setConfPath("defConf.ini");
// 访问logger触发配置读取
XLogger::getInstance()->getLogger();
// 记录日志,配置会从文件读取
XLOG_INFO("从配置文件读取的日志设置");
#else
std::cout << "未启用配置读取功能" << std::endl;
#endif
return 0;
}配置文件格式 (defConf.ini):
[CAT]
logLevel=info
logPath=./logs
logMaxSize=10项目包含多个示例程序,位于 example/ 目录:
basic_example- 基本使用示例multithread_example- 多线程日志示例file_logging_example- 文件日志和轮转示例performance_test- 性能测试示例custom_format_example- 自定义格式示例level_test_example- 日志级别测试示例config_example- 配置文件读取示例(需启用XLOGGER_ENABLE_CONFIG)
# 创建构建目录
mkdir build && cd build
# 配置CMake(普通模式)
cmake ..
# 配置CMake(启用配置文件支持)
cmake -DXLOGGER_ENABLE_CONFIG=ON ..
# 编译
cmake --build .
# 运行示例
./example/basic_example
./example/level_test_example
./example/config_example # 需要启用 XLOGGER_ENABLE_CONFIG本项目基于 spdlog 库构建,遵循相应的开源许可证。
欢迎提交 Issue 和 Pull Request 来改进这个项目。
- v1.0.0 - 初始版本,基于 spdlog 的单例日志库