# ymbxLog **Repository Path**: ymbx/log-sys ## Basic Information - **Project Name**: ymbxLog - **Description**: 本项目实现⼀个⽇志系统,⽀持多级别⽇志消息、同步和异步⽇志、多线程并发写日志,提供了可靠写⼊⽇志到控制台、⽂件以及滚动⽂件中并支持扩展不同的⽇志落地 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-13 - **Last Updated**: 2025-08-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ymbxLog *ymbxLog*是一个基于C++开发高性能、同步/异步日志库。旨在提升C++开发能力,并为后续程序编写提供一个接口简洁、易于使用、支持灵活配置和扩展的日志记录组件。 #### 主要功能 - ⽀持多级别⽇志消息 - ⽀持同步日志和异步⽇志 - ⽀持写入⽇志到控制台、⽂件、滚动⽂件中 - ⽀持扩展不同的⽇志落地⽬标地 - 支持条件宏日志便捷输出 #### 技术亮点 - **内存安全**:使用智能指针对代码中指针进行托管,大大增加了内存安全性。 - **线程安全**:使用C++11原子操作、互斥锁、条件变量实现线程安全,异步方式的日志读写交给不同的线程执行,不阻塞主线程。基于RAII思想使用unique_lock避免忘记解锁而造成的阻塞。 - **灵活配置与扩展**:支持自定义日志输出格式;可设置日志输出等级来控制输出的不同级别的日志内容;可选择的日志落地模块(控制台、文件、基于文件大小/时间的滚动文件),同时还提供接口支持落地模块的扩展;提供便捷接口来切换同步、异步安全/不安全的日志器。 - **多设计模式融合**:采用工厂模式实现`LogFormatter`类、`LogSink`类等,遵循开闭原则,提升代码的可维护性;采用建造者模式构造日志消息所需的各个模块整合起来,提供一组统一的接口供用户调用便捷创建`Logger`类;采用单例模式实现`LoggerManager`类,实现对全局`Logger`类的管理,并突破了局部作用域的限制。 - **高性能异步架构**:采用双缓冲区结构,写日志和日志到文件分属于不同的缓冲区,避免了空间的频繁申请释放,尽可能的减少了生产者与消费者之间的锁冲突,提高了任务处理效率。当缓冲区不足时可自动拓展,同时通知后台线程把缓冲区的数据写入本地文件,避免因前台程序日志写入内容过多导致的数据丢失。 #### 快速使用 > 日志格式:final_test.cc:12(test_log) [root][129268270069568] 测试开始 [2025-06-17 10:38:25] 使用 ``` #include "ymbxlog.hpp" // 主程序中建造日志器 int main(){ std::unique_ptr uplb(new GlobalLoggerBuild()); uplb->BuildLoggername("synclogger"); uplb->EnableLoggerSync(); uplb->BuildLimitLevel(LogLevel::Level::INFO); uplb->BuildFormatter(); uplb->BuildSink(); uplb->BuildSink("./log/fileS/filesink.txt"); uplb->BuildSink("./log/rollbfS/rollbyfilesink"); uplb->BuildSink("./log/rollbts/rollbytimesink"); uplb->Build(); } ``` ``` // 即可在全局作用域内通过日志器名打印日志消息 LOG_DEBUG(name,1,"DEBUG"); LOG_INFO(name,2,"INFO"); LOG_WARN(name,3, "WARNING"); LOG_ERROR(name, 4,"ERROR"); LOG_FATAL(name,5,"FATAL"); ``` #### 性能测试 > - **测试环境**:2核2G云服务器 > - **测试内容**:同步/异步下单线程和5线程输出百万条日志时间 > - **测试结果**: > > ![输入图片说明](img/image.png)![输入图片说明](img/image2.png) #### 设计思路 > 该系统由日志等级模块、日志格式化模块、日志消息模块、日志落地模块、日志器模块(同步/异步)、日志器管理器模块、线程组成 > - `LogLevel`:对输出⽇志的等级进⾏划分,以便于控制⽇志的输出,并提供等级枚举转字符串功能; > - `LogMes`:中间存储⽇志输出所需的各项要素信息; > - `LogFormatter`:设置⽇志输出格式,并提供对⽇志消息进⾏格式化功能; > - `LogSink`:决定了⽇志的落地⽅向,可以是标准输出,也可以是⽇志⽂件,也可以滚动⽂件输出... > - `Logger`:此模块是对以上⼏个模块的整合模块,⽤⼾通过⽇志器进⾏⽇志的输出,有效降低⽤⼾的使⽤难度,包含有:`LogSink`类,`LogFormatter`类,`LogLevel`类; > - `LoggerManager`:对创建的所有⽇志器进⾏统⼀管理,并提供⼀个默认⽇志器提供标准输出的⽇志输出; > - `AsyncLooper`:实现对⽇志的异步输出功能,⽤⼾只需要将输出⽇志任务放⼊任务池,异步线程负责⽇志的落地输出功能,以此提供更加⾼效的⾮阻塞⽇志输出。 #### 附录 1.pre文件夹包含一些基础知识的学习 2.src文件夹中具体实现代码,使用时只需包含ymbxlog头文件即可 3.functest文件夹中常规功能测试用例 4.extend文件夹中扩展模块功能测试用例 5.bench文件夹中性能测试