logging - rust - 将环境变量加载到 log4rs yml 文件中
问题描述
是否可以将环境变量加载到 log4rs yml 配置文件中?
我有一个简单的 rust 应用程序,它使用 log4rs 进行日志记录。我从位于项目根目录中的 yml 文件加载日志配置。
现在我需要从环境变量中获取文件附加程序路径。在 spring/java 中,我们可以使用${ABC}
yml 文件中的符号来做到这一点。
我可以使用 rust/log4rs 中的类似方法吗?
解决方案
与@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(),
}
})
}
推荐阅读
- uml - 两个不同演员在泳道上进行的相同活动
- c# - .net 将 https 连接到 nginx 时看不到静态文件
- jmeter - 为什么 Jmeter 吞吐量整形计时器允许的请求比配置的多?
- javascript - 为什么一个 Promise 会返回一个对象 Promise,即使我明确地放了 `return`?
- reactjs - 使用 React、Webpack 和 Apache 启用文本压缩
- silverstripe - SilverStripe 4.1 - SS_DEFAULT_ADMIN_USERNAME 和 PASSWORD 不受尊重
- javascript - 如何抓取存储在 html 页面中的图像
- ios - 在视图控制器之间平移(不滑动)
- javascript - 检查项目的离子存储
- node.js - 使用硒获取最后一个 Whats 应用程序的问题