#progress-bar #progress #log #logging #log-line

indicatif-log-bridge

连接日志 crate 和 indicatif,防止日志行与进度条混淆

5 个版本

新增 0.2.3 2024 年 8 月 24 日
0.2.2 2023 年 8 月 31 日
0.2.1 2023 年 7 月 31 日
0.2.0 2023 年 7 月 31 日
0.1.0 2023 年 7 月 31 日

#176并发

Download history 6118/week @ 2024-05-04 6962/week @ 2024-05-11 9898/week @ 2024-05-18 8548/week @ 2024-05-25 13068/week @ 2024-06-01 11314/week @ 2024-06-08 11460/week @ 2024-06-15 10439/week @ 2024-06-22 8072/week @ 2024-06-29 10296/week @ 2024-07-06 9072/week @ 2024-07-13 8582/week @ 2024-07-20 9161/week @ 2024-07-27 10163/week @ 2024-08-03 9120/week @ 2024-08-10 7700/week @ 2024-08-17

37,390 每月下载量
用于 24 个 Crates (18 个直接)

MIT 许可证

8KB

Indicatif Log Bridge

厌倦了日志行和进度条混淆?indicatif_log_bridge 来帮忙!

只需将您最喜欢的日志实现包装在 [LogWrapper] 中,那些烦恼就不再是问题。

只需记住,将每个 ProgressBar 添加到您使用的 [MultiProgress] 中,否则进度条将变成幽灵般的一半。

示例

    let logger =
        env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info"))
            .build();
    let level = logger.filter();
    let multi = MultiProgress::new();

    LogWrapper::new(multi.clone(), logger)
        .try_init()
        .unwrap();
    log::set_max_level(level);

    let pg = multi.add(ProgressBar::new(10));
    for i in (0..10) {
        std::thread::sleep(Duration::from_micros(100));
        info!("iteration {}", i);
        pg.inc(1);
    }
    pg.finish();
    multi.remove(&pg);

这个 crate 的代码相当简单,您可以随意查看。

已知问题

错误的全局日志级别

日志框架有一个全局最小级别,使用 log::set_max_level 设置。如果设置为 Debug,则 trace! 宏将不会触发。[Log] 特性没有提供查询期望级别的一致化方式。[LogWrapper::try_init](https://docs.rs/indicatif-log-bridge/latest/indicatif_log_bridge/?search=LogWrapper%3A%3Atry_init) 尽力寻找正确的级别,但并不总是正确,尤其是在不同模块或 Crates 中指定了不同级别的情况下,如常见的 [env_logger](https://docs.rs/env_logger/latest/env_logger/) crate。

解决方案

对于 [env_logger](https://docs.rs/env_logger/latest/env_logger/) 而言,您可以使用 logger.filter([]) 在构造和初始化 [LogWrapper] 之前查询级别,然后将其传递给 [log::set_max_level](https://docs.rs/releases/search?query=log%3A%3Aset_max_level)。如果您复制了 [示例代码](https://),应该没有问题。

依赖项

~1.5–9MB
~63K SLoC