为什么货物测试显示我有痕迹!当我指定RUST_LOG=debug?



当我指定RUST_LOG=debug时,为什么cargo test显示的是trace!的日志

我使用SimpleLogger作为测试后端,像这样初始化(init_logger在每个测试函数的开始被调用):

static INIT_LOGGER: Once = Once::new();
pub fn init_logger() {
INIT_LOGGER.call_once(|| {
SimpleLogger::new().init().unwrap();
});
}

我用:

运行测试
RUST_LOG=debug cargo test

我看到了所有的日志消息,INFO,DEBUG

我只希望看到DEBUG消息。

另外,我希望只看到来自我自己的crate的消息,而不是来自它的依赖项,这是可能的吗?

SimpleLogger默认不响应环境变量。

使用.env()方法启用该行为:

use std::sync::Once;
use simple_logger::SimpleLogger;
static INIT_LOGGER: Once = Once::new();
pub fn init_logger() {
INIT_LOGGER.call_once(|| {
SimpleLogger::new().env().init().unwrap();
});
}
fn main() {
init_logger();
log::error!("error");
log::warn!("warn");
log::info!("info");
log::debug!("debug");
log::trace!("trace");
}
> RUST_LOG=debug cargo run
2022-07-09T14:49:19.733Z ERROR [streamer] error
2022-07-09T14:49:19.733Z WARN [streamer] warn
2022-07-09T14:49:19.733Z INFO [streamer] info
2022-07-09T14:49:19.733Z DEBUG [streamer] debug
> RUST_LOG=info cargo run
2022-07-09T14:49:25.022Z ERROR [streamer] error
2022-07-09T14:49:25.022Z WARN [streamer] warn
2022-07-09T14:49:25.022Z INFO [streamer] info

或者使用更流行的EnvLogger

使用EnvLogger你可以做你想要的;您可以为不同的依赖项启用不同的日志级别。下面是EnvLogger可以实现的更详细的描述。

use std::sync::Once;
static INIT_LOGGER: Once = Once::new();
pub fn init_logger() {
INIT_LOGGER.call_once(|| {
env_logger::init();
});
}
fn main() {
init_logger();
log::error!("error");
log::warn!("warn");
log::info!("info");
log::debug!("debug");
log::trace!("trace");
}
> RUST_LOG=debug cargo run
[2022-07-09T14:52:42Z ERROR streamer] error
[2022-07-09T14:52:42Z WARN  streamer] warn
[2022-07-09T14:52:42Z INFO  streamer] info
[2022-07-09T14:52:42Z DEBUG streamer] debug
> RUST_LOG=info cargo run
[2022-07-09T14:52:46Z ERROR streamer] error
[2022-07-09T14:52:46Z WARN  streamer] warn
[2022-07-09T14:52:46Z INFO  streamer] info

最新更新