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 文件系统
43,293 每月下载量
用于 18 个Crate (直接使用10个)
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