# mylog **Repository Path**: blueLotu/mylog ## Basic Information - **Project Name**: mylog - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-18 - **Last Updated**: 2026-07-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # mylog - High-Performance C++ Logging Library 基于 Qt 5.15 + C++17 的高性能日志库,支持同步/异步模式、自动文件分片(时间+大小)、纯 C++ 核心层与 QT 适配层分离。 ## 架构 ``` mylog_core (Pure C++17, zero Qt dependency) └── mylog (Qt 5.15 adapter layer) ``` - **核心层**:后台纯 C++ 服务可直接链接 `mylog_core` - **QT 适配层**:前端 QT 插件链接 `mylog`(依赖 Qt + mylog_core) ## 快速开始 ### 纯 C++ 使用(无 Qt) ```cpp #include "mylog/core/logger.h" #include "mylog/core/sinks/console_sink.h" #include "mylog/macros/log_macros.h" using namespace mylog::core; int main() { auto& logger = Logger::get("app"); logger.setLevel(LogLevel::DEBUG); logger.addSink(std::make_unique()); LOG_INFO("Application started"); LOG_DEBUG("Debug value: {}", 42); LOG_ERROR("Something went wrong!"); logger.flush(); return 0; } ``` ### Qt 使用(流式宏) ```cpp #include "mylog/adapters/mylog_logger.h" #include "mylog/macros/mylog_macros.h" QLOG_INFO() << "Plugin initializing..."; QLOG_DEBUG() << "Current value:" << value; QLOG_ERROR() << "Error:" << errorMessage; ``` ## 特性 - **高性能异步日志**:lock-free queue + 预分配内存池,热路径 <500ns - **自动文件分片**:按大小 / 按时间 / 混合分片 - **QT 信号槽集成**:日志实时显示到 UI 控件 - **编译期优化**:`MYLOG_DISABLE` 宏可完全消除日志代码 - **双模式**:同步直写 / 异步后台写入 ## 文件分片示例 ```cpp // 按大小分片:100MB/文件,保留10个 auto sink = std::make_unique("app.log", 100*1024*1024, 10); // 按时间分片:每天 00:00 auto sink = std::make_unique("app.log", 0, 0, 30); // 混合分片 auto hybrid = std::make_unique(); hybrid->addPolicy(std::make_unique(100_MB)); hybrid->addPolicy(std::make_unique(24, 0)); ``` ## 构建 构建产出两个库: - **`mylog_core`** — 纯 C++17,零 Qt 依赖(后台纯 C++ 服务使用) - **`mylog`** — 依赖 Qt 5.15 + mylog_core(前端 Qt 插件使用) ### 手动编译 (MinGW / GCC) ```bash # 1. 编译核心库 g++ -std=c++17 -DMYLOG_CORE_LIBRARY -shared -I include \ src/core/*.cpp src/core/sinks/*.cpp src/core/rotation/*.cpp \ -o build/mylog_core.dll # 2. 运行 moc(Qt 元对象编译器) moc include/mylog/adapters/mylog_logger.h -o build/moc_mylog_logger.cpp moc include/mylog/adapters/qt_signal_sink.h -o build/moc_qt_signal_sink.cpp # 3. 编译 Qt 适配库 g++ -std=c++17 -DMYLOG_LIBRARY -shared -I include \ -I $QTDIR/include -I $QTDIR/include/QtCore \ src/adapters/*.cpp build/moc_*.cpp \ -Lbuild -lmylog_core -L$QTDIR/lib -lQt5Core \ -o build/mylog.dll ``` ### CMake ```bash cmake -B build -DCMAKE_BUILD_TYPE=Release -DMYLOG_BUILD_TESTS=ON cmake --build build --parallel cd build && ctest --output-on-failure ``` ### qmake (Qt Creator) ```bash qmake mylog_core.pro && make # 核心库 qmake mylog.pro && make # QT 适配库 ``` ## 项目结构 ``` include/mylog/ ├── core/ # 纯 C++17 核心层 ├── adapters/ # Qt 5.15 适配层 └── macros/ # 日志宏定义 src/ ├── core/ # 核心实现 └── adapters/ # 适配实现 tests/ # 单元测试 (gtest) examples/ # 用户使用示例(按功能独立) design/ # 设计文档(UML + 方案说明) third_party/ # 可选第三方依赖(fmtlib, moodycamel) ``` ## 使用示例 | 示例 | 说明 | |------|------| | `examples/demo_basic` | 基础同步日志(控制台+文件) | | `examples/demo_async_performance` | 异步高性能日志 + 吞吐量统计 | | `examples/demo_rotation_by_size` | 按大小分片(10KB 快速演示) | | `examples/demo_rotation_by_time` | 按时间分片 | | `examples/demo_rotation_hybrid` | 混合分片(大小+时间) | | `examples/demo_qt_plugin` | Qt 插件中使用日志 | | `examples/demo_backend_pure_cpp` | 纯 C++ 后台服务使用 | | `examples/demo_structured_logging` | 结构化键值对日志 | ## 参考 - QsLog: QT Destination 插件模式 - spdlog: 异步高性能 Sink 模式 - moodycamel::ConcurrentQueue: lock-free 队列 - fmtlib: 编译期格式串校验