我想使用字符串设置跟踪级别(因为我从环境变量获取级别)。
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();
Run Code Online (Sandbox Code Playgroud)
我想这应该是一种将字符串解析为 Level 对象的方法,但我不知道如何实现。
Level
实现FromStr
接受“错误”、“警告”、“信息”、“调试”或“跟踪”(不区分大小写)。所以你可以像这样使用它:
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();
Run Code Online (Sandbox Code Playgroud)
注意:我使用的::from_str()
不是.parse()
因为.with_max_level()
是通用的并且需要类型注释。
正如 @Finomnis 所建议的,一个功能更丰富的解决方案将是利用,EnvFilter
因为它允许配置全局日志级别等(请参阅文档)。
tracing_subscriber::fmt()
.with_env_filter(EnvFilter::from_env("LOG_LEVEL"))
.with_target(false)
.init();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
590 次 |
最近记录: |