首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HOCON配置文件动态替换

HOCON配置文件动态替换
EN

Stack Overflow用户
提问于 2018-08-23 06:45:22
回答 1查看 1.6K关注 0票数 2

我使用HOCON来配置日志消息,我正在寻找一种动态替换占位符值的方法。

我知道${?PLACEHOLDER}将读取一个环境变量,并在PLACEHOLDER环境变量不存在时返回一个空字符串。

示例

这就是我所想到的一个例子:

(我使用config4k加载HOCON )

代码语言:javascript
复制
data class LogMessage(val message: String, val code: String)

fun getMessage(key: String, placeholderValues: Array<String> = arrayOf()): LogMessage {
    val config = ConfigFactory.parseString("MY_LOG_MESSAGE {code = ABC-123456, message = My log message with dynamic value %0% and another dynamic value %1% }")

    val messageObject = config.extract<LogMessage>(key)
    var message = messageObject.message

    placeholderValues.forEachIndexed { placeholderIndex, value ->
        message = message.replace("%$placeholderIndex%", value)
    }

    return messageObject.copy(message = message)
}

fun main(args: Array<String>) {    
    println(getMessage("MY_LOG_MESSAGE", arrayOf("value 1", "value 2")))

    // prints: LogMessage(message=My log message with dynamic value value 1 and another dynamic value value 2, code=ABC-123456)
}

尽管这是可行的,但它看起来并不是最好的解决方案,我认为已经有了解决方案。

有人能告诉我是否有一个内置的解决方案吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-24 07:24:24

首先要做的是。

HOCON只是一种美化的JSON格式。config4k只是一个包装器。

您可能已经注意到,所有的工作都是由台风声完成的。

从他们的文档和代码判断,他们只支持占位符从文件,或从环境:

此库仅限于配置文件。如果要从数据库或其他地方加载配置,则需要编写一些自定义代码。

但是对于您所做的工作,简单的String.format()就足够了:

代码语言:javascript
复制
fun interpolate(message: String, vararg args: Any) = String.format(message, *args)

println(interpolate("My message was %s %s %s %s", "a", 1, 3.32, true)) 
// My message was a 1 3.32 true

请注意,您可以使用*来对数组进行重构。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51979804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档