1个不稳定版本

0.1.0 2024年8月11日

#11 in #rate

Download history 97/week @ 2024-08-09

每月下载次数:97次

MIT/Apache

9KB
128

log_limit

一个速率限制日志crate。简单地将log crate包装起来,如果特定的日志行调用太频繁,则忽略写入日志。这由阈值和周期控制。如果达到阈值,则在此周期剩余时间内忽略日志。当达到阈值和下一个周期开始时,记录警告以通知用户正在忽略日志,并提供被忽略的日志数量。

示例

use std::thread;
use std::time::Duration;

use log_limit::info_limit;
use simple_logger::SimpleLogger;

SimpleLogger::new().init().unwrap();
for i in 0..10 {
    log::debug!("Loop number: {i}");
    info_limit!(3, Duration::from_millis(5), "Rate limit log for {i}");
    thread::sleep(Duration::from_millis(1));
}

// Produces:
//
// 2024-08-10T15:45:41.278Z DEBUG [log_limit_user] Loop number: 0
// 2024-08-10T15:45:41.278Z INFO  [log_limit_user] Rate limit log for 0
// 2024-08-10T15:45:41.279Z DEBUG [log_limit_user] Loop number: 1
// 2024-08-10T15:45:41.279Z INFO  [log_limit_user] Rate limit log for 1
// 2024-08-10T15:45:41.280Z DEBUG [log_limit_user] Loop number: 2
// 2024-08-10T15:45:41.280Z INFO  [log_limit_user] Rate limit log for 2
// 2024-08-10T15:45:41.280Z WARN  [log_limit] Starting to ignore the previous log for less than 5ms
// 2024-08-10T15:45:41.281Z DEBUG [log_limit_user] Loop number: 3
// 2024-08-10T15:45:41.282Z DEBUG [log_limit_user] Loop number: 4
// 2024-08-10T15:45:41.283Z DEBUG [log_limit_user] Loop number: 5
// 2024-08-10T15:45:41.283Z WARN  [log_limit] Ignored 3 logs since more than 5ms ago. Starting again...
// 2024-08-10T15:45:41.283Z INFO  [log_limit_user] Rate limit log for 5
// 2024-08-10T15:45:41.285Z DEBUG [log_limit_user] Loop number: 6
// 2024-08-10T15:45:41.285Z INFO  [log_limit_user] Rate limit log for 6
// 2024-08-10T15:45:41.286Z DEBUG [log_limit_user] Loop number: 7
// 2024-08-10T15:45:41.286Z INFO  [log_limit_user] Rate limit log for 7
// 2024-08-10T15:45:41.286Z WARN  [log_limit] Starting to ignore the previous log for less than 5ms
// 2024-08-10T15:45:41.287Z DEBUG [log_limit_user] Loop number: 8
// 2024-08-10T15:45:41.288Z DEBUG [log_limit_user] Loop number: 9

待办事项

  • 实现线程局部变体(你能让它听起来怎么样?)
  • 进行一些基准测试和优化
  • 处理所有代码中的待办事项。
  • 找出是否有更多的用例和配置需求
  • 找出为什么我的宏API看起来与日志API不同?目标是什么?
  • 添加更多文档
  • 找出正确的API

依赖项

~87KB