From 93b13e80b7097c4393505ea07e6b58af7cf9814a Mon Sep 17 00:00:00 2001 From: Mark Harrah Date: Sun, 6 Mar 2011 21:57:31 -0500 Subject: [PATCH] success indication and timestamps for actions --- util/log/BasicLogger.scala | 3 +++ util/log/BufferedLogger.scala | 6 ++++++ util/log/ConsoleLogger.scala | 2 +- util/log/FilterLogger.scala | 4 +++- util/log/FullLogger.scala | 3 ++- util/log/Level.scala | 5 ++--- util/log/LogEvent.scala | 1 + util/log/Logger.scala | 6 +++++- util/log/MultiLogger.scala | 5 +++++ 9 files changed, 28 insertions(+), 7 deletions(-) diff --git a/util/log/BasicLogger.scala b/util/log/BasicLogger.scala index a52d3b433..f7adb11ce 100644 --- a/util/log/BasicLogger.scala +++ b/util/log/BasicLogger.scala @@ -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 } diff --git a/util/log/BufferedLogger.scala b/util/log/BufferedLogger.scala index 38f845e11..73aa7f8e5 100644 --- a/util/log/BufferedLogger.scala +++ b/util/log/BufferedLogger.scala @@ -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) diff --git a/util/log/ConsoleLogger.scala b/util/log/ConsoleLogger.scala index 0f9e78b22..4005a0889 100644 --- a/util/log/ConsoleLogger.scala +++ b/util/log/ConsoleLogger.scala @@ -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 = diff --git a/util/log/FilterLogger.scala b/util/log/FilterLogger.scala index 152f6bdd5..59048c381 100644 --- a/util/log/FilterLogger.scala +++ b/util/log/FilterLogger.scala @@ -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) diff --git a/util/log/FullLogger.scala b/util/log/FullLogger.scala index 091664244..e562fdb20 100644 --- a/util/log/FullLogger.scala +++ b/util/log/FullLogger.scala @@ -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) diff --git a/util/log/Level.scala b/util/log/Level.scala index bc1156729..62fb5f2c2 100644 --- a/util/log/Level.scala +++ b/util/log/Level.scala @@ -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 diff --git a/util/log/LogEvent.scala b/util/log/LogEvent.scala index ffe6049d7..7bd91c2a4 100644 --- a/util/log/LogEvent.scala +++ b/util/log/LogEvent.scala @@ -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 diff --git a/util/log/Logger.scala b/util/log/Logger.scala index 3be05b539..04babcc4e 100644 --- a/util/log/Logger.scala +++ b/util/log/Logger.scala @@ -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) diff --git a/util/log/MultiLogger.scala b/util/log/MultiLogger.scala index 525e3ef9d..9cdb65386 100644 --- a/util/log/MultiLogger.scala +++ b/util/log/MultiLogger.scala @@ -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)) }