14个重大版本发布
0.16.0 | 2020年5月3日 |
---|---|
0.15.0 | 2020年1月10日 |
0.14.0 | 2019年9月17日 |
0.13.0 | 2019年6月12日 |
0.3.0 | 2018年9月23日 |
#308 在 #logger
32 每月下载量
20KB
298 代码行
简单日志工具包
项目
- 仓库: https://bitbucket.org/haibison/ice-age
- 许可:Nice License 1.0.0 (请参阅
master
分支根目录下的LICENSE
文件) - 此项目遵循语义版本化2.0.0
设计
它使用同步通道进行通信。日志记录存储在RAM中,并将在某些可配置条件下刷新到磁盘:一定时间后或当记录数达到最大值时。
后端:SQLite。
该包的日志消息前面加上TAG
。
示例
use std::{
env,
sync::mpsc::TrySendError,
thread,
time::{UNIX_EPOCH, Duration, SystemTime},
};
use ice_age::{Config, Cmd, Log, Logger};
let config = Config {
// Directory to save log files
work_dir: env::temp_dir(),
// For this example, max file length is 1 MiB
max_file_len: 1024 * 1024,
// Keep log files at most 3 days
log_files_reserved: Duration::from_secs(3 * 24 * 60 * 60),
// Maximum log records to be kept in RAM
buf_len: 5_000,
// Flush to disk every 30 minutes
disk_flush_interval: Duration::from_secs(30 * 60),
};
let logger = Logger::make(config).unwrap();
for _ in 0..3 {
let logger = logger.clone();
thread::spawn(move || {
let log = Log {
time: SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs(),
remote_ip: String::from("127.0.0.1"),
url: String::from("/api/statistics"),
response_size: Some(512),
code: 200,
runtime: Duration::from_secs(1),
notes: None,
};
// Use ::try_send() to not block the thread.
// This example's strategy is to discard failed calls.
match logger.try_send(Cmd::StoreLog(log)) {
Ok(()) => (),
Err(TrySendError::Full(_)) =>
eprintln!("Log buffer is full, discarding..."),
Err(TrySendError::Disconnected(_)) =>
eprintln!("Failed to store log. Perhaps log server is down."),
};
});
}
依赖
~22MB
~419K SLoC