Я использую HOCON для настройки сообщений журнала и ищу способ динамической замены значений заполнителей.
Я знаю, что ${?PLACEHOLDER}
прочитает переменную среды и вернет пустую строку, если переменная среды PLACEHOLDER
не существует.
Пример
Это пример того, что я имел в виду:
(Я использую config4k
для загрузки HOCON)
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)
}
Несмотря на то, что это работает, это не похоже на лучшее решение, и я предполагаю, что решение для этого уже есть.
Может кто подскажет, есть ли встроенное решение?