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 在 并发 中
37,390 每月下载量
用于 24 个 Crates (18 个直接)
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