17次发布

0.7.6 2024年5月16日
0.7.5 2023年6月8日
0.7.4 2023年5月14日
0.7.3 2023年3月14日
0.1.1 2019年7月27日

#37 in 文件系统

Download history 20300/week @ 2024-05-05 16989/week @ 2024-05-12 19456/week @ 2024-05-19 18650/week @ 2024-05-26 19585/week @ 2024-06-02 19060/week @ 2024-06-09 17554/week @ 2024-06-16 20984/week @ 2024-06-23 27394/week @ 2024-06-30 16336/week @ 2024-07-07 8797/week @ 2024-07-14 10398/week @ 2024-07-21 10346/week @ 2024-07-28 10977/week @ 2024-08-04 10206/week @ 2024-08-11 11290/week @ 2024-08-18

43,293 每月下载量
用于 18 个Crate (直接使用10个)

MIT 许可证

67KB
1K SLoC

file-rotate

使用可配置后缀轮转文件。

查看文档以获取所有功能的解释示例,例如

  • 使用计数或时间戳作为后缀
  • 基于年龄删除日志文件
  • 可选压缩
  • 获取日志文件列表

局限性 / 已知问题

  • file-rotate 假设没有其他进程或用户在日志目录中移动文件,但我们希望找到一种方法来 支持这一点

以下是一些入门示例。

基本示例

use file_rotate::{FileRotate, ContentLimit, compression::Compression, suffix::AppendCount};
use std::{fs, io::Write, path::PathBuf};

fn main() {
    let mut log = FileRotate::new("logs/log", AppendCount::new(2), ContentLimit::Lines(3), Compression::None, None);

    // Write a bunch of lines
    writeln!(log, "Line 1: Hello World!");
    for idx in 2..=10 {
        writeln!(log, "Line {}", idx);
    }
}
$ ls logs
log  log.1  log.2

$ cat log.2 log.1 log
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10

使用时间戳后缀的示例

let mut log = FileRotate::new(
    "logs/log",
    AppendTimestamp::default(FileLimit::MaxFiles(3)),
    ContentLimit::Lines(3),
    Compression::None,
    None,
);

// Write a bunch of lines
writeln!(log, "Line 1: Hello World!");
for idx in 2..=10 {
    std::thread::sleep(std::time::Duration::from_millis(200));
    writeln!(log, "Line {}", idx);
}
$ ls logs
log                  log.20210825T151133.1
log.20210825T151133  log.20210825T151134

$ cat logs/*
Line 10
Line 1: Hello World!
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9

默认情况下,时间戳格式(包括额外的尾部 .N)通过默认方式工作,使得文件名的词法顺序等于时间顺序。因此,它与 cat logs/* 几乎完美匹配,除了 log 较小(词法上“较老”)以外。当然,可以通过更复杂的脚本来组装日志来解决这个问题。

许可证

本项目采用 MIT 许可证

贡献

除非您明确声明,否则您有意提交并包含在 file-rotate 中的任何贡献都将根据 MIT 许可证进行许可,不附加任何额外条款或条件。

依赖关系

~1.3–6.5MB
~32K SLoC