apply javac log level approach to directJavac

This commit is contained in:
Mark Harrah 2011-06-26 12:27:06 -04:00
parent 83aff9d3c2
commit 5c8d619880
1 changed files with 14 additions and 3 deletions

View File

@ -5,11 +5,13 @@ package sbt
/** Provides a `java.io.Writer` interface to a `Logger`. Content is line-buffered and logged at `level`.
* A line is delimited by `nl`, which is by default the platform line separator.*/
class LoggerWriter(delegate: Logger, level: Level.Value, nl: String) extends java.io.Writer
class LoggerWriter(delegate: Logger, unbufferedLevel: Option[Level.Value], nl: String = System.getProperty("line.separator")) extends java.io.Writer
{
def this(delegate: Logger, level: Level.Value) = this(delegate, level, System.getProperty("line.separator"))
def this(delegate: Logger, level: Level.Value) = this(delegate, Some(level))
def this(delegate: Logger) = this(delegate, None)
private[this] val buffer = new StringBuilder
private[this] val lines = new collection.mutable.ListBuffer[String]
override def close() = flush()
override def flush(): Unit =
@ -20,6 +22,12 @@ class LoggerWriter(delegate: Logger, level: Level.Value, nl: String) extends jav
buffer.clear()
}
}
def flushLines(level: Level.Value): Unit =
synchronized {
for(line <- lines)
delegate.log(level, line)
lines.clear()
}
override def write(content: Array[Char], offset: Int, length: Int): Unit =
synchronized {
buffer.appendAll(content, offset, length)
@ -36,5 +44,8 @@ class LoggerWriter(delegate: Logger, level: Level.Value, nl: String) extends jav
process()
}
}
private[this] def log(s: String): Unit = delegate.log(level, s)
private[this] def log(s: String): Unit = unbufferedLevel match {
case None => lines += s
case Some(level) => delegate.log(level, s)
}
}