#log #logging #capturing #filtering #box-dyn #wrapping #wrap

nightly no-std log-wrap

通过包装 Box<dyn log::Log> 实现日志的实用工具,例如日志过滤、日志捕获

1 个不稳定版本

0.1.0 2023 年 1 月 8 日

#16 in #capturing

MIT 许可协议

9KB
163 代码行,不包括注释

log-wrap

通过包装 Box<dyn log::Log> 实现日志的实用工具,例如日志过滤、日志捕获

示例

按模块名称过滤日志

fn main() {
    std::env::set_var("RUST_LOG", "info");
    let logger = env_logger::Builder::from_default_env().build();
    log::set_max_level(logger.filter());
    log_wrap::LogWrap::new(Box::new(logger))
        .black_module(["hyper", "h2"])
        .init()
        .unwrap();

    // your code ...
}

捕获每个线程中的日志,并在线程退出前同步输出

fn main() {
    std::env::set_var("RUST_LOG", "info");
    let logger = env_logger::Builder::from_default_env().build();
    log::set_max_level(logger.filter());
    log_wrap::LogWrap::new(Box::new(logger))
        .enable_thread_capture()
        .init()
        .unwrap();

    let joins = (0..5)
        .map(|t| {
            std::thread::spawn(move || {
                let _guard = log_wrap::capture_thread_log();
                for i in 0..5 {
                    log::info!("thread#{t} {i} ...");
                }
            })
        })
        .collect::<Vec<_>>();
    for j in joins {
        j.join().unwrap()
    }
}

依赖项

~87KB