rust 如何将String转换为要与tracing_subscriber一起使用的Level?

rekjcdws  于 2023-05-07  发布在  其他
关注(0)|答案(1)|浏览(111)

我想使用String设置跟踪级别(因为我从env变量中获取级别)。

let env_log_level = std::env::var("LOG_LEVEL").unwrap();

tracing_subscriber::fmt()
    .with_max_level(tracing::Level::DEBUG) // somehow use env_log_level here
    .with_target(false)
    .init();

我想这应该是一种将String解析为Level对象的方法,但我不知道如何实现。

uttx8gqw

uttx8gqw1#

Level实现了FromStr,它接受“error”、“warn”、“info”、“debug”或“trace”(不区分大小写)。你可以这样使用它:

use std::str::FromStr;

let env_log_level = std::env::var("LOG_LEVEL").unwrap();

tracing_subscriber::fmt()
    .with_max_level(Level::from_str(&env_log_level).unwrap())
    .with_target(false)
    .init();

注意:我使用了::from_str()而不是.parse(),因为.with_max_level()是泛型的,需要类型注解。
正如@Finomnis所建议的,一个功能更丰富的解决方案是利用EnvFilter,因为它允许配置全局日志级别等(参见文档)。

tracing_subscriber::fmt()
    .with_env_filter(EnvFilter::from_env("LOG_LEVEL"))
    .with_target(false)
    .init();

相关问题