Skip to content

Commit

Permalink
Simplification of FormatBlock, added function builder, and added Form…
Browse files Browse the repository at this point in the history
…atBlock.map (Resolves #36).
  • Loading branch information
darkfrog26 committed Mar 1, 2018
1 parent d0de112 commit f12885c
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 40 deletions.
84 changes: 45 additions & 39 deletions core/shared/src/main/scala/scribe/format/FormatBlock.scala
Original file line number Diff line number Diff line change
@@ -1,16 +1,24 @@
package scribe.format

import java.lang

import scribe._

trait FormatBlock {
def format(record: LogRecord, b: java.lang.StringBuilder): Unit
def format(record: LogRecord): String

def map(f: String => String): FormatBlock = FormatBlock.Mapped(this, f)
}

object FormatBlock {
def apply(f: LogRecord => String): FormatBlock = new FormatBlock {
override def format(record: LogRecord): String = f(record)
}

case class Mapped(block: FormatBlock, f: String => String) extends FormatBlock {
override def format(record: LogRecord): String = f(block.format(record))
}

case class RawString(s: String) extends FormatBlock {
override def format(record: LogRecord, b: java.lang.StringBuilder): Unit = b.append(s)
override def format(record: LogRecord): String = s
}

object Date {
Expand All @@ -22,43 +30,40 @@ object FormatBlock {
override def initialValue(): Long = 0L
}

override def format(record: LogRecord, b: java.lang.StringBuilder): Unit = {
override def format(record: LogRecord): String = {
val l = record.timeStamp
val current = if (l - lastValue.get() > 1000L) {
if (l - lastValue.get() > 1000L) {
val d = sfi"${l.tY}.${l.tm}.${l.td} ${l.tT}"
cache.set(d)
lastValue.set(l)
d
} else {
cache.get()
}
b.append(current)
}
}
}

object ThreadName extends FormatBlock {
override def format(record: LogRecord, b: java.lang.StringBuilder): Unit = b.append(record.thread.getName)
override def format(record: LogRecord): String = record.thread.getName
}

object Level {
object PaddedRight extends FormatBlock {
override def format(record: LogRecord, b: java.lang.StringBuilder): Unit = b.append(record.level.namePaddedRight)
override def format(record: LogRecord): String = record.level.namePaddedRight
}
}

object ClassName {
object Full extends FormatBlock {
override def format(record: LogRecord, b: lang.StringBuilder): Unit = {
b.append(record.className)
}
override def format(record: LogRecord): String = record.className
}
object Abbreviated extends FormatBlock {
private val MaxSize = 1000000
private var cache = Map.empty[String, String]

override def format(record: LogRecord, b: java.lang.StringBuilder): Unit = {
val abbreviation: String = cache.get(record.className) match {
override def format(record: LogRecord): String = {
cache.get(record.className) match {
case Some(a) => a
case None => synchronized {
val parts = record.className.split('.')
Expand All @@ -74,61 +79,62 @@ object FormatBlock {
a
}
}
b.append(abbreviation)
}
}
}

object MethodName {
object Full extends FormatBlock {
override def format(record: LogRecord, b: lang.StringBuilder): Unit = {
record.methodName.foreach(b.append)
}
override def format(record: LogRecord): String = record.methodName.getOrElse("")
}
}

object Position {
object Full extends FormatBlock {
override def format(record: LogRecord, b: lang.StringBuilder): Unit = {
ClassName.Full.format(record, b)
if (record.methodName.nonEmpty) {
b.append(".")
MethodName.Full.format(record, b)
override def format(record: LogRecord): String = {
val className = ClassName.Full.format(record)
val methodName = if (record.methodName.nonEmpty) {
sfi".${MethodName.Full.format(record)}"
} else {
""
}
if (record.lineNumber.nonEmpty) {
b.append(":")
LineNumber.Full.format(record, b)
val lineNumber = if (record.lineNumber.nonEmpty) {
sfi":${LineNumber.Full.format(record)}"
} else {
""
}
sfi"$className$methodName$lineNumber"
}
}
object Abbreviated extends FormatBlock {
override def format(record: LogRecord, b: lang.StringBuilder): Unit = {
ClassName.Abbreviated.format(record, b)
if (record.methodName.nonEmpty) {
b.append(".")
MethodName.Full.format(record, b)
override def format(record: LogRecord): String = {
val className = ClassName.Abbreviated.format(record)
val methodName = if (record.methodName.nonEmpty) {
sfi".${MethodName.Full.format(record)}"
} else {
""
}
if (record.lineNumber.nonEmpty) {
b.append(":")
LineNumber.Full.format(record, b)
val lineNumber = if (record.lineNumber.nonEmpty) {
sfi":${LineNumber.Full.format(record)}"
} else {
""
}
sfi"$className$methodName$lineNumber"
}
}
}

object LineNumber {
object Full extends FormatBlock {
override def format(record: LogRecord, b: lang.StringBuilder): Unit = {
record.lineNumber.foreach(b.append)
}
override def format(record: LogRecord): String = record.lineNumber.map(_.toString).getOrElse("")
}
}

object Message extends FormatBlock {
override def format(record: LogRecord, b: java.lang.StringBuilder): Unit = b.append(record.message)
override def format(record: LogRecord): String = record.message
}

object NewLine extends FormatBlock {
override def format(record: LogRecord, b: java.lang.StringBuilder): Unit = b.append("\n")
override def format(record: LogRecord): String = "\n"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class FormatBlocksFormatter(blocks: List[FormatBlock]) extends Formatter {
blocks: List[FormatBlock]): String = if (blocks.isEmpty) {
b.toString
} else {
blocks.head.format(record, b)
b.append(blocks.head.format(record))
applyBlocks(b, record, blocks.tail)
}
}

0 comments on commit f12885c

Please sign in to comment.