in src/main/scala/com/gu/mobile/logback/MobileLogstashEncoder.scala [20:54]
def concatenateEnvToCustomFields(customFields: String, extraFields: Map[String, String]): String = {
def parsedTreeNode: Try[TreeNode] = {
if (customFields != null && customFields.trim != "") {
Try(jsonFactory.createParser(customFields).readValueAsTree[TreeNode]())
} else {
Success(mapper.createObjectNode())
}
}
def appendToObjectNode(treeNode: TreeNode): Try[ObjectNode] = treeNode match {
case objectNode: ObjectNode => {
extraFields.foreach { case (key, value) => objectNode.put(key, value) }
Success(objectNode)
}
case _ => Failure(new RuntimeException(s"Parsed Json was not an object: ${customFields}"))
}
def serialiseToString(objectNode: ObjectNode): Try[String] = Try {
val sw = new StringWriter()
val generator = jsonFactory.createGenerator(sw)
generator.writeTree(objectNode)
sw.toString
}
val concatenatedFields = for {
treeNode <- parsedTreeNode
objectNode <- appendToObjectNode(treeNode)
output <- serialiseToString(objectNode)
} yield output
concatenatedFields match {
case Success(result) => result
case Failure(exception) => throw exception
}
}