[英]Why does cargo test show me trace! logs when I specify RUST_LOG=debug?
Why does cargo test
show me trace!
为什么
cargo test
显示我的trace!
logs when I specify RUST_LOG=debug
?我指定
RUST_LOG=debug
时的日志?
I'm using SimpleLogger
as a test backend, initialized like that ( init_logger
is called at the beginning of each test function):我使用
SimpleLogger
作为测试后端,像这样初始化(在每个测试函数的开头调用init_logger
):
static INIT_LOGGER: Once = Once::new();
pub fn init_logger() {
INIT_LOGGER.call_once(|| {
SimpleLogger::new().init().unwrap();
});
}
I run the tests with:我运行测试:
RUST_LOG=debug cargo test
And I see all log messages, INFO
, DEBUG
...我看到所有日志消息,
INFO
, DEBUG
...
I'd like to see only the DEBUG
messages.我只想看到
DEBUG
消息。
Also, I'd like to see only the messages from my own crate, not from its dependencies, is that possible?另外,我只想看到来自我自己的箱子的消息,而不是来自它的依赖项,这可能吗?
SimpleLogger
by default does not react to environment variables. SimpleLogger
默认不对环境变量做出反应。
Use the .env()
method to enable that behaviour:使用
.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
Or use the much more popular EnvLogger
instead.或者改用更流行的
EnvLogger
。
With EnvLogger
you can do exactly what you were asking for;使用
EnvLogger
,您可以完全按照您的要求进行操作; you can enable different log levels for different dependencies.您可以为不同的依赖项启用不同的日志级别。 Here is a more detailed description of what can be achieved with
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.