这个项目能做什么
Quill 是一个面向 C++17 及更高版本的异步日志与指标库,专为性能关键型和延迟敏感型应用设计。其核心设计将格式化和 I/O 移出调用线程:日志参数在前端编码,由专用后端工作线程处理,因此昂贵的格式化操作远离热路径。
README 中描述的主要能力:
- 异步处理:后台线程负责格式化和 I/O,保持应用线程响应迅速。
- 指标发布:预注册的指标样本可通过同一异步后端发送。内置的 Prometheus 接收器处理计数器、仪表、直方图和摘要,自定义接收器可将样本路由到 StatsD、OpenTelemetry 或其他进程内收集器。
- 最小头文件占用:前端仅需 Logger.h 和 LogMacros.h,后端通过单个 .cpp 文件包含,避免后端代码注入其他翻译单元。
- 编译期选项:日志级别可在编译期消除,前端队列和内存策略可在编译期调整。
- 运行时配置:后端空闲行为、CPU 亲和性、缓冲、时间戳处理、刷新和回调均可配置,日志记录器可由内置或自定义接收器组合而成,并支持按接收器过滤。
- 时间戳:支持 rdtsc、chrono 或自定义时钟,具备跨线程时间戳比较功能,并为延迟生产者提供可配置的宽限窗口。
- 接收器与输出:控制台(带颜色)、文件(带轮转)、JSON,以及自定义接收器。
- 附加功能:通过环形缓冲区进行回溯日志记录、日志过滤、JSON 结构化日志、映射诊断上下文(MDC)、限速宏、可配置的有界/无界和阻塞/丢弃队列模式及监控、通过信号处理程序进行崩溃处理、Linux 上的大页支持、Windows 上的宽字符支持,以及无异常构建选项。
- 基于 {fmt} 库构建的类型安全 API。
可通过多种包管理器安装,包括 vcpkg、Conan、Homebrew、Meson WrapDB、Conda、Bzlmod、xmake、nix 和 build2。快速入门路径使用 simple_logger() 实现控制台或文件输出,而详细设置则暴露 Backend 和 Frontend API,以便显式控制接收器、日志记录器和格式化器。还提供了无宏函数 API,据描述比宏 API 稍慢。
README 包含基准测试表,将 Quill 与其他 C++ 日志库在记录数字、大字符串和复杂类型等场景下进行对比,分别使用一个线程和四个线程。这些结果基于特定的系统配置和基准测试方法呈现,应视为项目自身的测量结果,而非独立验证。
评论
0 人表达喜爱 · 满10人后显示 Deer Point
登录后参与讨论。