当我指定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