Skip to content

Instantly share code, notes, and snippets.

@choffmeister
Created March 20, 2016 12:26
Show Gist options
  • Save choffmeister/7d75a310888bbe6e06d6 to your computer and use it in GitHub Desktop.
Save choffmeister/7d75a310888bbe6e06d6 to your computer and use it in GitHub Desktop.
package io.airfocus.common.logging
import com.fasterxml.jackson.core.JsonGenerator
import net.logstash.logback.argument.StructuredArgument
import net.logstash.logback.marker.LogstashMarker
import spray.json._
case class JsonAppendingMarker(members: (String, JsValue)*) extends LogstashMarker("JSON_MARKER") with StructuredArgument {
override def writeTo(generator: JsonGenerator): Unit = {
def recursion(current: JsValue): Unit = current match {
case JsObject(fields) =>
generator.writeStartObject()
fields.foreach { field =>
generator.writeFieldName(field._1)
recursion(field._2)
}
generator.writeEndObject()
case JsArray(items) =>
generator.writeStartArray()
items.foreach { item =>
recursion(item)
}
generator.writeEndArray()
case JsNumber(number) if number.isValidLong =>
generator.writeNumber(number.toLong)
case JsNumber(number) =>
generator.writeNumber(number.toDouble)
case JsBoolean(boolean) =>
generator.writeBoolean(boolean)
case JsString(string) =>
generator.writeString(string)
case JsNull =>
generator.writeNull()
}
members.foreach { field =>
generator.writeFieldName(field._1)
recursion(field._2)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment