#低延迟 #日志记录 #线程 #缓存 #级别

low_latency_log

Rust的快速低延迟日志库

2个不稳定版本

0.2.0 2024年6月20日
0.1.0 2024年6月20日

#85 in 缓存

Apache-2.0

33KB
791

Rust的快速低延迟日志库

简介

low-latency-log是一个高性能、低延迟的Rust日志库。

特性

  • 非常低延迟low-latency-log注重性能,采用最小化关键数据结构的大小、避免在关键路径上使用锁、缓存格式化字符串等技术。
  • 异步日志记录low-latency-log将所有重日志操作(如格式化、时间转换等)卸载到独立线程,确保调用线程不会被阻塞。

基准测试

low-latency-log提供的p999延迟与quill相当,并在吞吐量方面优于quillspdlog-rsftlogfast_log

更多详细信息,请参阅基准测试

要构建基准测试二进制文件,请运行

cargo b -r -p bench

使用示例

use low_latency_log::{info, Level};
use std::fs;

fn main() {
    let rc = RollingCondition::new().daily();
    // Remember to keep the following guard, otherwise the global logger stops immediately when the guard auto-drops
    let _guard = low_latency_log::Logger::new(rc, "/dev/shm".to_string(), "log.log".to_string())
        .cpu(1)
        .init()
        .unwrap();

    for i in 1..1_000_001 {
        info!("number {}", i);
    }

    // _guard auto-dropped and log flushed
}

待办事项

以下优化正在进行中

  • 优化std format!
  • 改进ufmt以提供更多类型的格式化支持(例如,浮点类型)。
  • 支持自定义格式类型,因为目前low_latency_log输出固定的时间和日志格式。
  • 优化使用log crate时的性能。

low_latency_log受到了以下项目的极大启发

许可证

本项目采用Apache许可证。

部分代码来自logflume项目。有关更多信息,请参阅LICENSE-LOGFLUME

依赖项

~3.5MB
~66K SLoC