首页 > 解决方案 > 使用 $ 符号无法在 Scala 中读取环境变量

问题描述

在 Scala 环境属性中添加属性

val sysProps = System.getProperties
sysProps.setProperty("current.date.time", LocalDateTime.now().toString())

我能够保存这个属性。

我尝试current.date.time在 log4j.properties 中访问此属性(),如下所示

log4j.appender.file.File=C:/Users/vsami/Desktop/Demo_${current.date.time}.log
log4j.appender.file.File=C:/Users/vsami/Desktop/Demo_${env:current.date.time}.log

日志文件正在上述位置生成,如Demo_.log预期:-Demo_2019/11/27T13:21:00.log

上述实现并不能帮助我从环境属性访问变量并生成具有预期命名约定的日志文件。

标签: scalaapache-sparklogginglog4jcloudera

解决方案


JVM 具有可以-D在 VM 启动时通过参数传递的属性。-Dprop=value. 这些属性可以通过System.getPropertiesAPI 调用读取。有关更多信息,请参阅文档

环境变量不是在 JVM 启动时指定的,而是由您的启动环境(可以是 shell、bash 等)独立于 VM 管理。您无法更改已运行 VM 中的环境变量。这些变量可以通过以下方式读取System.getenv()

$是log4j中的查找运算符,可用于解析带有前缀的环境变量或带有 前缀env:主要参数查找main:

您可以使用main:current.date.time并初始化您的值,如下所示

MainMapLookup.setMainArguments(Array("--current.date.time", LocalDateTime.now().toString()));

确保MainMapLookup在初始化日志记录之前调用它。


推荐阅读