有没有办法以编程方式更改日志箱的默认日志记录级别?

Ren*_*non 8 logging environment-variables rust

我正在用 Rust 开发一个项目,供系统管理员通过 CLI 使用。在这个程序中,我想要这样的行:

warn!("File {} not found, proceeding to next file", file_path);
Run Code Online (Sandbox Code Playgroud)

我不认为软件上下文中存在错误,但我仍然希望我的用户能够意识到这一点。

然而,Rust 的日志系统默认情况下仅在ERROR日志级别打印消息,我发现更改此默认值的唯一方法是设置RUST_LOG环境变量 - 我不希望我的用户必须这样做。我想我可以创建一个包装器脚本,只设置变量并exec保存程序,但我宁愿不这样做。

有没有办法从程序内部以编程方式更改默认级别?

two*_*rec 13

这是一个技巧,可以做到这一点

if env::var("RUST_LOG").is_err() {
    env::set_var("RUST_LOG", "info")
}
env_logger::init();
Run Code Online (Sandbox Code Playgroud)


Dmi*_*try 8

如果你使用 env_logger 你可以在 main 中执行如下操作:

    env_logger::builder()
        .filter_level(log::LevelFilter::Debug)
        .format_target(false)
        .format_timestamp(None)
        .init();
Run Code Online (Sandbox Code Playgroud)


Vla*_*eev 4

不,这是不可能的。只要浏览一下库的代码,liblog您就可以看到所有日志级别配置都存储在全局变量中,这些全局变量仅使用Once原语修改一次,并且无法修改此配置。

Rust 日志记录非常简单;如果你想要更复杂的东西,你就必须自己做。liblog提供了一个扩展点,一个名为 的特征Logger,它可能可以用于您的目的。