#log #logger #logging

async_logger_log

异步日志记录

3 个不稳定版本

0.2.0 2020年4月19日
0.1.2 2020年3月17日
0.1.1 2020年3月15日

#147#logger

Download history 5/week @ 2024-03-09 3/week @ 2024-03-16 8/week @ 2024-03-30 1/week @ 2024-04-06

282 每月下载量

MIT 许可证

14KB
152 代码行,不包括注释

async_logger_log

Rust

异步日志记录器是对 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();

注意

  1. time 包的依赖是可选的,可以通过在 Cargo.toml 中添加来排除
[dependencies.async_logger_log]
default-features = false
  1. 此包在 Linux x86_64 上进行了测试。Rust 版本 1.42。

依赖项

~2.5MB
~54K SLoC