mirror of https://github.com/sbt/sbt.git
71 lines
2.7 KiB
Scala
71 lines
2.7 KiB
Scala
|
|
/* sbt -- Simple Build Tool
|
||
|
|
* Copyright 2008, 2009 Mark Harrah
|
||
|
|
*/
|
||
|
|
package xsbt
|
||
|
|
|
||
|
|
abstract class Logger extends NotNull
|
||
|
|
{
|
||
|
|
def getLevel: Level.Value
|
||
|
|
def setLevel(newLevel: Level.Value)
|
||
|
|
def enableTrace(flag: Boolean)
|
||
|
|
def traceEnabled: Boolean
|
||
|
|
|
||
|
|
def atLevel(level: Level.Value) = level.id >= getLevel.id
|
||
|
|
def trace(t: => Throwable): Unit
|
||
|
|
final def debug(message: => String): Unit = log(Level.Debug, message)
|
||
|
|
final def info(message: => String): Unit = log(Level.Info, message)
|
||
|
|
final def warn(message: => String): Unit = log(Level.Warn, message)
|
||
|
|
final def error(message: => String): Unit = log(Level.Error, message)
|
||
|
|
def success(message: => String): Unit
|
||
|
|
def log(level: Level.Value, message: => String): Unit
|
||
|
|
def control(event: ControlEvent.Value, message: => String): Unit
|
||
|
|
|
||
|
|
def logAll(events: Seq[LogEvent]): Unit
|
||
|
|
/** Defined in terms of other methods in Logger and should not be called from them. */
|
||
|
|
final def log(event: LogEvent)
|
||
|
|
{
|
||
|
|
event match
|
||
|
|
{
|
||
|
|
case s: Success => success(s.msg)
|
||
|
|
case l: Log => log(l.level, l.msg)
|
||
|
|
case t: Trace => trace(t.exception)
|
||
|
|
case setL: SetLevel => setLevel(setL.newLevel)
|
||
|
|
case setT: SetTrace => enableTrace(setT.enabled)
|
||
|
|
case c: ControlEvent => control(c.event, c.msg)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
sealed trait LogEvent extends NotNull
|
||
|
|
final class Success(val msg: String) extends LogEvent
|
||
|
|
final class Log(val level: Level.Value, val msg: String) extends LogEvent
|
||
|
|
final class Trace(val exception: Throwable) extends LogEvent
|
||
|
|
final class SetLevel(val newLevel: Level.Value) extends LogEvent
|
||
|
|
final class SetTrace(val enabled: Boolean) extends LogEvent
|
||
|
|
final class ControlEvent(val event: ControlEvent.Value, val msg: String) extends LogEvent
|
||
|
|
|
||
|
|
object ControlEvent extends Enumeration
|
||
|
|
{
|
||
|
|
val Start, Header, Finish = Value
|
||
|
|
}
|
||
|
|
|
||
|
|
/** An enumeration defining the levels available for logging. A level includes all of the levels
|
||
|
|
* with id larger than its own id. For example, Warn (id=3) includes Error (id=4).*/
|
||
|
|
object Level extends Enumeration with NotNull
|
||
|
|
{
|
||
|
|
val Debug = Value(1, "debug")
|
||
|
|
val Info = Value(2, "info")
|
||
|
|
val Warn = Value(3, "warn")
|
||
|
|
val Error = Value(4, "error")
|
||
|
|
/** Defines the label to use for success messages. A success message is logged at the info level but
|
||
|
|
* uses this label. Because the label for levels is defined in this module, the success
|
||
|
|
* label is also defined here. */
|
||
|
|
val SuccessLabel = "success"
|
||
|
|
|
||
|
|
// added because elements was renamed to iterator in 2.8.0 nightly
|
||
|
|
def levels = Debug :: Info :: Warn :: Error :: Nil
|
||
|
|
/** Returns the level with the given name wrapped in Some, or None if no level exists for that name. */
|
||
|
|
def apply(s: String) = levels.find(s == _.toString)
|
||
|
|
/** Same as apply, defined for use in pattern matching. */
|
||
|
|
private[xsbt] def unapply(s: String) = apply(s)
|
||
|
|
}
|