sbt/scripted/src/main/scala/ScriptedLogger.scala

50 lines
1.7 KiB
Scala

package sbt.test
object Reflected
{
type Logger =
{
def enableTrace(flag: Boolean): Unit
def traceEnabled: Boolean
def getLevel: Int
def setLevel(level: Int): Unit
def trace(t: F0[Throwable]): Unit
def success(message: F0[String]): Unit
def log(level: Int, message: F0[String]): Unit
def control(event: Int, message: F0[String]): Unit
}
type F0[T] =
{
def apply(): T
}
}
final class LocalLogger(logger: Logger) extends NotNull
{
import Reflected.F0
def enableTrace(flag: Boolean) = logger.enableTrace(flag)
def traceEnabled = logger.traceEnabled
def getLevel = logger.getLevel.id
def setLevel(level: Int) = logger.setLevel(Level(level))
def trace(t: F0[Throwable]) = logger.trace(t())
def success(message: F0[String]) = logger.success(message())
def log(level: Int, message: F0[String]) = logger.log(Level(level), message())
def control(event: Int, message: F0[String]) = logger.control(ControlEvent(event), message())
}
final class RemoteLogger(logger: Reflected.Logger) extends Logger
{
private final class F0[T](s: => T) extends NotNull { def apply(): T = s }
def getLevel: Level.Value = Level(logger.getLevel)
def setLevel(newLevel: Level.Value) = logger.setLevel(newLevel.id)
def enableTrace(flag: Boolean) = logger.enableTrace(flag)
def traceEnabled = logger.traceEnabled
def trace(t: => Throwable) = logger.trace(new F0(t))
def success(message: => String) = logger.success(new F0(message))
def log(level: Level.Value, message: => String) = logger.log(level.id, new F0(message))
def control(event: ControlEvent.Value, message: => String) = logger.control(event.id, new F0(message))
def logAll(events: Seq[LogEvent]) = events.foreach(log)
}