2010-06-11 03:26:27 +02:00
|
|
|
/* sbt -- Simple Build Tool
|
|
|
|
|
* Copyright 2008, 2009, 2010 Mark Harrah
|
|
|
|
|
*/
|
|
|
|
|
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.*/
|
2010-07-05 18:53:37 +02:00
|
|
|
class LoggerWriter(delegate: Logger, level: Level.Value, nl: String) extends java.io.Writer
|
2010-06-11 03:26:27 +02:00
|
|
|
{
|
2010-07-05 18:53:37 +02:00
|
|
|
def this(delegate: Logger, level: Level.Value) = this(delegate, level, System.getProperty("line.separator"))
|
2010-06-11 03:26:27 +02:00
|
|
|
|
|
|
|
|
private[this] val buffer = new StringBuilder
|
|
|
|
|
|
|
|
|
|
override def close() = flush()
|
|
|
|
|
override def flush(): Unit =
|
|
|
|
|
synchronized {
|
|
|
|
|
if(buffer.length > 0)
|
|
|
|
|
{
|
|
|
|
|
log(buffer.toString)
|
|
|
|
|
buffer.clear()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
override def write(content: Array[Char], offset: Int, length: Int): Unit =
|
|
|
|
|
synchronized {
|
2010-06-11 04:47:04 +02:00
|
|
|
buffer.appendAll(content, offset, length)
|
2010-06-11 03:26:27 +02:00
|
|
|
process()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private[this] def process()
|
|
|
|
|
{
|
|
|
|
|
val i = buffer.indexOf(nl)
|
|
|
|
|
if(i >= 0)
|
|
|
|
|
{
|
|
|
|
|
log(buffer.substring(0, i))
|
|
|
|
|
buffer.delete(0, i + nl.length)
|
|
|
|
|
process()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private[this] def log(s: String): Unit = delegate.log(level, s)
|
|
|
|
|
}
|