3 个不稳定版本
0.2.0 | 2020年4月19日 |
---|---|
0.1.2 | 2020年3月17日 |
0.1.1 | 2020年3月15日 |
#147 在 #logger
282 每月下载量
14KB
152 代码行,不包括注释
async_logger_log
异步日志记录器是对 log 面板的性能实现。实现基于 async_logger 包,允许在内存缓冲区中非阻塞地写入日志记录,然后由写入者(请参阅 async_logger
文档中的更多详细信息)在单独的线程中处理。
默认日志记录格式包括日期、时间、时区、日志级别、目标以及日志消息本身。日志记录示例
[2020-03-15 11:47:32.339865887+0100 WARN thread]: 日志消息。
日志记录格式和其他参数可以通过 LoggerBuilder
进行自定义。
示例
use async_logger_log::Logger;
use log::{info, warn};
let logger = Logger::new("/tmp", 256, 10*1024*1024).expect("Failed to create Logger instance");
log::set_boxed_logger(Box::new(logger)).expect("Failed to set logger");
log::set_max_level(log::LevelFilter::Info);
info!("{}", "test msg");
warn!("{}", "warning msg");
log::logger().flush();
自定义写入器和格式化器
use async_logger_log::Logger;
use async_logger::Writer;
use log::{debug, Record};
// Custom formatting of `log::Record`
fn custom_formatter(record: &Record) -> String {
format!("log record: {}\n", record.args())
}
struct StdoutWriter {}
// Writer simply prints log messages to stdout
impl Writer<Box<String>> for StdoutWriter {
fn process_slice(&mut self, slice: &[Box<String>]) {
for item in slice {
println!("{}", **item);
}
}
fn flush(&mut self) { }
}
let logger = Logger::builder()
.buf_size(256)
.formatter(custom_formatter)
.writer(Box::new(StdoutWriter {}))
.build()
.unwrap();
log::set_boxed_logger(Box::new(logger)).expect("Failed to set logger");
log::set_max_level(log::LevelFilter::Trace);
debug!("{}", "Hello, Wrold!");
log::logger().flush();
注意
- 对
time
包的依赖是可选的,可以通过在 Cargo.toml 中添加来排除
[dependencies.async_logger_log]
default-features = false
- 此包在 Linux x86_64 上进行了测试。Rust 版本 1.42。
依赖项
~2.5MB
~54K SLoC