Merge pull request #152 from retronym/topic/format

Performance optimizations around logging
This commit is contained in:
eugene yokota 2018-03-01 01:19:34 -05:00 committed by GitHub
commit 226a543f92
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 7 deletions

View File

@ -353,8 +353,10 @@ class ConsoleAppender private[ConsoleAppender] (
* @param msg The message to format
* @return The formatted message.
*/
private def formatted(format: String, msg: String): String =
s"$reset${format}${msg}$reset"
private def formatted(format: String, msg: String): String = {
val builder = new java.lang.StringBuilder(reset.length * 2 + format.length + msg.length)
builder.append(reset).append(format).append(msg).append(reset).toString
}
/**
* Select the right color for the label given `level`.
@ -388,9 +390,14 @@ class ConsoleAppender private[ConsoleAppender] (
): Unit =
out.lockObject.synchronized {
message.lines.foreach { line =>
val labeledLine =
s"$reset[${formatted(labelColor, label)}] ${formatted(messageColor, line)}"
write(labeledLine)
val builder = new java.lang.StringBuilder(
labelColor.length + label.length + messageColor.length + line.length + reset.length * 3 + 3)
def fmted(a: String, b: String) = builder.append(reset).append(a).append(b).append(reset)
builder.append(reset).append('[')
fmted(labelColor, label)
builder.append("] ")
fmted(messageColor, line)
write(builder.toString)
}
}

View File

@ -37,7 +37,7 @@ object ConsoleOut {
lockObject.print(OverwriteLine)
lockObject.println(s)
last = Some(s)
current = new java.lang.StringBuffer
current.setLength(0)
}
}

View File

@ -25,9 +25,11 @@ class ManagedLogger(
)
}
private val SuccessEventTag = scala.reflect.runtime.universe.typeTag[SuccessEvent]
// send special event for success since it's not a real log level
override def success(message: => String): Unit = {
infoEvent[SuccessEvent](SuccessEvent(message))
infoEvent[SuccessEvent](SuccessEvent(message))(implicitly[JsonFormat[SuccessEvent]],
SuccessEventTag)
}
def registerStringCodec[A: ShowLines: TypeTag]: Unit = {