# logger **Repository Path**: arhunn/logger ## Basic Information - **Project Name**: logger - **Description**: No description available - **Primary Language**: C/C++ - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-24 - **Last Updated**: 2026-03-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Logger 一个轻量级、现代化的 C++ 日志管理与存储库。 它不仅提供标准的日志记录接口,还内置了高效的内存日志存储 (`LogStore`) 和强大的过滤系统 (`LogFilter`),非常适合用于需要 GUI 显示日志的桌面应用程序或需要内存缓冲的后端服务。 #### 主要特性 * **现代化接口**:遵循 Google C++ Code Style,支持 C++20 `std::format` 风格的格式化输出。 * **高性能存储**:内置 `LogStore` 模块,高效管理内存中的日志数据,支持线程安全写入。 * **强大过滤**:`LogFilter` 支持基于日志级别、关键字搜索和正则表达式(Regex)的高级过滤。 * **低耦合**:核心接口 `ILogger` 纯虚基类设计,易于扩展和 Mock。 * **跨平台**:基于标准 C++ 编写,支持 Windows (DLL Export) 及 Linux/macOS。 #### 软件架构 项目主要由以下核心模块组成: * **ILogger**: 定义日志记录的标准接口(Trace, Debug, Info, ...)。 * **LogEntry**: 标准化的日志数据结构,包含时间戳、线程ID、级别等信息。 * **LogStore (原 LogViewController)**: 负责日志的集中存储、管理和并发控制。 * **LogFilter**: 独立的过滤逻辑封装,支持复用编译好的正则表达式,适合 UI 高频增量刷新。 #### 环境要求 * C++17 或更高版本 (推荐 C++20 以获得 `std::format` 原生支持)。 * CMake 3.10+。 * 对于 Visual Studio 用户,建议开启 `/Zc:__cplusplus` 选项。 #### 安装教程 本项目是一个标准的 CMake 项目,您可以直接将其作为子目录引入,或编译为静态库/动态库。 1. **克隆仓库** ```bash git clone https://gitee.com/your-repo/logger.git ``` 2. **引入 CMake** ```cmake add_subdirectory(logger) target_link_libraries(your_app PRIVATE logger) ``` #### 使用说明 ##### 1. 基础日志记录 ```cpp #include "logging/ILogger.h" #include // 假设您已经有了具体的 Logger 实现 std::shared_ptr logger = GetLogger(); // 基础用法 logger->Info("系统启动成功"); logger->Error("连接数据库失败"); // 使用 std::format 风格格式化 (需 C++20) int port = 8080; logger->Info("服务正在监听端口: {}", port); logger->Warn("用户 {} 尝试非法访问,次数: {}", "Admin", 3); ##### 2. 日志存储与过滤 (LogStore) 这是本项目最核心的功能,用于管理和检索日志。 ```cpp #include "logging/LogStore.h" #include "logging/LogEntry.h" // 1. 初始化存储 logging::LogStore log_store; // 2. 模拟写入日志 (通常由 Logger 实现自动调用) std::vector new_logs; new_logs.emplace_back(logging::LogLevel::kInfo, "Network", "Connected to server"); log_store.AddLogs(std::move(new_logs)); // 3. 定义过滤条件 logging::FilterState state; state.enabled_levels = {logging::LogLevel::kInfo, logging::LogLevel::kError}; state.search_term = "connect"; // 搜索关键字 state.use_regex = false; // 是否使用正则 // 4. 获取过滤后的日志 // 方式 A: 直接获取列表 (适合全量刷新) auto filtered_logs = log_store.GetFilteredLogs(state); // 方式 B: 使用 LogFilter 对象 (适合 UI 增量更新,性能更高) logging::LogFilter filter(state); // 正则在此处编译一次 for (const auto& log : incoming_logs) { if (filter.Matches(log)) { ui->AppendLog(log); } } ```