success indication and timestamps for actions

This commit is contained in:
Mark Harrah 2011-03-06 21:57:31 -05:00
parent f9e8534a89
commit 93b13e80b7
9 changed files with 28 additions and 7 deletions

View File

@ -8,6 +8,9 @@ abstract class BasicLogger extends AbstractLogger
{
private var traceEnabledVar = java.lang.Integer.MAX_VALUE
private var level: Level.Value = Level.Info
private var successEnabledVar = true
def successEnabled = successEnabledVar
def setSuccessEnabled(flag: Boolean) { successEnabledVar = flag }
def getLevel = level
def setLevel(newLevel: Level.Value) { level = newLevel }
def setTrace(level: Int) { traceEnabledVar = level }

View File

@ -52,6 +52,12 @@ class BufferedLogger(delegate: AbstractLogger) extends AbstractLogger
buffer += new SetLevel(newLevel)
delegate.setLevel(newLevel)
}
def setSuccessEnabled(flag: Boolean)
{
buffer += new SetSuccess(flag)
delegate.setSuccessEnabled(flag)
}
def successEnabled = delegate.successEnabled
def getLevel = delegate.getLevel
def getTrace = delegate.getTrace
def setTrace(level: Int)

View File

@ -60,7 +60,7 @@ class ConsoleLogger private[ConsoleLogger](val out: ConsoleOut, override val ans
def successMessageColor = Console.RESET
override def success(message: => String)
{
if(atLevel(Level.Info))
if(successEnabled)
log(successLabelColor, Level.SuccessLabel, successMessageColor, message)
}
def trace(t: => Throwable): Unit =

View File

@ -14,6 +14,8 @@ class FilterLogger(delegate: AbstractLogger) extends BasicLogger
if(traceEnabled)
delegate.trace(t)
}
override def setSuccessEnabled(flag: Boolean) { delegate.setSuccessEnabled(flag) }
override def successEnabled = delegate.successEnabled
override def setTrace(level: Int) { delegate.setTrace(level) }
override def getTrace = delegate.getTrace
def log(level: Level.Value, message: => String)
@ -23,7 +25,7 @@ class FilterLogger(delegate: AbstractLogger) extends BasicLogger
}
def success(message: => String)
{
if(atLevel(Level.Info))
if(successEnabled)
delegate.success(message)
}
def control(event: ControlEvent.Value, message: => String)

View File

@ -17,7 +17,8 @@ class FullLogger(delegate: Logger, override val ansiCodesSupported: Boolean = fa
delegate.log(level, message)
}
def success(message: => String): Unit =
info(message)
if(successEnabled)
delegate.success(message)
def control(event: ControlEvent.Value, message: => String): Unit =
info(message)
def logAll(events: Seq[LogEvent]): Unit = events.foreach(log)

View File

@ -11,9 +11,8 @@ object Level extends Enumeration
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. */
/** Defines the label to use for success messages.
* Because the label for levels is defined in this module, the success label is also defined here. */
val SuccessLabel = "success"
def union(a: Value, b: Value) = if(a.id < b.id) a else b

View File

@ -9,6 +9,7 @@ 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 level: Int) extends LogEvent
final class SetSuccess(val enabled: Boolean) extends LogEvent
final class ControlEvent(val event: ControlEvent.Value, val msg: String) extends LogEvent
object ControlEvent extends Enumeration

View File

@ -12,9 +12,10 @@ abstract class AbstractLogger extends Logger
def setTrace(flag: Int)
def getTrace: Int
final def traceEnabled = getTrace >= 0
def successEnabled: Boolean
def setSuccessEnabled(flag: Boolean): Unit
def atLevel(level: Level.Value) = level.id >= getLevel.id
def success(message: => String): Unit
def control(event: ControlEvent.Value, message: => String): Unit
def logAll(events: Seq[LogEvent]): Unit
@ -28,6 +29,7 @@ abstract class AbstractLogger extends Logger
case t: Trace => trace(t.exception)
case setL: SetLevel => setLevel(setL.newLevel)
case setT: SetTrace => setTrace(setT.level)
case setS: SetSuccess => setSuccessEnabled(setS.enabled)
case c: ControlEvent => control(c.event, c.msg)
}
}
@ -45,6 +47,7 @@ object Logger
override def trace(msg: F0[Throwable]) = lg.trace(msg)
override def log(level: Level.Value, msg: F0[String]) = lg.log(level, msg)
def trace(t: => Throwable) = trace(f0(t))
def success(s: => String) = info(f0(s))
def log(level: Level.Value, msg: => String) =
{
val fmsg = f0(msg)
@ -73,6 +76,7 @@ trait Logger extends xLogger
def ansiCodesSupported = false
def trace(t: => Throwable): Unit
def success(message: => String): Unit
def log(level: Level.Value, message: => String): Unit
def debug(msg: F0[String]): Unit = log(Level.Debug, msg)

View File

@ -19,6 +19,11 @@ class MultiLogger(delegates: List[AbstractLogger]) extends BasicLogger
super.setTrace(level)
dispatch(new SetTrace(level))
}
override def setSuccessEnabled(flag: Boolean)
{
super.setSuccessEnabled(flag)
dispatch(new SetSuccess(flag))
}
def trace(t: => Throwable) { dispatch(new Trace(t)) }
def log(level: Level.Value, message: => String) { dispatch(new Log(level, message)) }
def success(message: => String) { dispatch(new Success(message)) }