首页 > 解决方案 > rust - 将环境变量加载到 log4rs yml 文件中

问题描述

是否可以将环境变量加载到 log4rs yml 配置文件中?

我有一个简单的 rust 应用程序,它使用 log4rs 进行日志记录。我从位于项目根目录中的 yml 文件加载日志配置。

现在我需要从环境变量中获取文件附加程序路径。在 spring/java 中,我们可以使用${ABC}yml 文件中的符号来做到这一点。

我可以使用 rust/log4rs 中的类似方法吗?

标签: loggingrustyaml

解决方案


与@lbolla 建议的类似,您可以将配置文件加载到 YAML 文本字符串中,然后用于serde_yaml::from_str(&str)反序列化它。${}然后,就可以使用我下面写的函数,以文中的格式展开环境变量。最后,您可以将扩展文本写入文件并使用该文件来初始化您的记录器。

use std::env;
use regex::Regex;
use regex::Captures;
use std::borrow::Cow;

fn expand_var(raw_config: &str) -> Cow<str> {

    let re = Regex::new(r"\$\{([a-zA-Z_][0-9a-zA-Z_]*)\}").unwrap();
    re.replace_all(&raw_config, |caps: &Captures| {
        match env::var(&caps[1]) {
            Ok(val) => val,
            Err(_) => (&caps[0]).to_string(),
        }
    })
}

锈游乐场


推荐阅读