Logging 如何使用log4rs更改正在运行的进程的日志级别?
我试图在Rust程序运行期间动态更改日志级别 我使用log4rs,因为他们声称这是可能的 但是当我运行下面的程序时,它崩溃了——当我试图更改日志级别时——我认为这是对日志API的限制(根据这一点:) 是否有其他方法可以在运行时更改日志级别 以下是我试图做的:Logging 如何使用log4rs更改正在运行的进程的日志级别?,logging,rust,Logging,Rust,我试图在Rust程序运行期间动态更改日志级别 我使用log4rs,因为他们声称这是可能的 但是当我运行下面的程序时,它崩溃了——当我试图更改日志级别时——我认为这是对日志API的限制(根据这一点:) 是否有其他方法可以在运行时更改日志级别 以下是我试图做的: use log4rs::append::console::ConsoleAppender; use log4rs::append::console::Target; use log4rs::config::{Appender, Config
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
}
输出:
2020-04-20T12:07:53.351080400+01:00错误使用日志-错误
2020-04-20T12:07:53.354078400+01:00警告使用日志-警告
2020-04-20T12:07:53.356077200+01:00信息使用日志信息
线程'main'在'Err'值:SetLoggerError(())'上调用'Result::unwrap()'时惊慌失措,src\main.rs:48:5
您只能调用init\u config
一次。但是,它返回一个带有方法的句柄,您可以在以后调用该句柄来更改配置:
let hndl = log4rs::init_config(config).unwrap();
// ...
// Apply new config:
hndl.set_config(config);
不错。以操场为例的荣誉。