我试图在 Rust 程序运行期间动态更改日志级别。
我在他们的例子中使用了 log4rs,他们声称这是可能的。
但是当我运行以下程序时它崩溃了 - 当我尝试更改日志级别时 - 我认为这是日志 API 的限制(根据:https: //github.com/rust-lang/log/blob/主控/src/lib.rs#L1278)
还有其他方法可以在运行时更改日志级别吗?
这是我正在尝试做的事情:
use log4rs::append::console::ConsoleAppender;
use log4rs::append::console::Target;
use log4rs::config::{Appender, Config, Root};
use log::*;
fn main() {
let level_info = log::LevelFilter::Info;
let level_trace = log::LevelFilter::Trace;
let stderr = ConsoleAppender::builder().target(Target::Stderr).build();
let config = Config::builder().appender(
Appender::builder()
.build("stderr", Box::new(stderr)),
).build(
Root::builder()
.appender("stderr")
.build(level_info),
).unwrap();
log4rs::init_config(config).unwrap();
error!("error"); //should print
warn!("warn"); //should print
info!("info"); //should print
debug!("debug"); //should not print
trace!("trace"); //should not print
let stderr = ConsoleAppender::builder().target(Target::Stderr).build();
let config = Config::builder().appender(
Appender::builder()
.build("stderr", Box::new(stderr)),
).build(
Root::builder()
.appender("stderr")
.build(level_trace),
).unwrap();
log4rs::init_config(config).unwrap();
error!("error2"); //should print
warn!("warn2"); //should print
info!("info2"); //should print
debug!("debug2"); //should print
trace!("trace2"); //should print
}
Run Code Online (Sandbox Code Playgroud)
输出:
use log4rs::append::console::ConsoleAppender;
use log4rs::append::console::Target;
use log4rs::config::{Appender, Config, Root};
use log::*;
fn main() {
let level_info = log::LevelFilter::Info;
let level_trace = log::LevelFilter::Trace;
let stderr = ConsoleAppender::builder().target(Target::Stderr).build();
let config = Config::builder().appender(
Appender::builder()
.build("stderr", Box::new(stderr)),
).build(
Root::builder()
.appender("stderr")
.build(level_info),
).unwrap();
log4rs::init_config(config).unwrap();
error!("error"); //should print
warn!("warn"); //should print
info!("info"); //should print
debug!("debug"); //should not print
trace!("trace"); //should not print
let stderr = ConsoleAppender::builder().target(Target::Stderr).build();
let config = Config::builder().appender(
Appender::builder()
.build("stderr", Box::new(stderr)),
).build(
Root::builder()
.appender("stderr")
.build(level_trace),
).unwrap();
log4rs::init_config(config).unwrap();
error!("error2"); //should print
warn!("warn2"); //should print
info!("info2"); //should print
debug!("debug2"); //should print
trace!("trace2"); //should print
}
Run Code Online (Sandbox Code Playgroud)
您只能拨打init_config一次。但是,它返回一个带有set_config方法的句柄,您可以稍后调用该方法来更改配置:
let hndl = log4rs::init_config(config).unwrap();
// ...
// Apply new config:
hndl.set_config(config);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1712 次 |
| 最近记录: |