mirror of https://github.com/sbt/sbt.git
add extraLoggers to make it easier to add loggers
This commit is contained in:
parent
5d0cdc8de4
commit
738e32b9c6
|
|
@ -62,6 +62,7 @@ object Defaults extends BuildCommon
|
|||
credentials :== Nil,
|
||||
scalaHome :== None,
|
||||
javaHome :== None,
|
||||
extraLoggers :== { _ => Nil },
|
||||
version :== "0.1",
|
||||
outputStrategy :== None,
|
||||
exportJars :== false,
|
||||
|
|
@ -90,6 +91,7 @@ object Defaults extends BuildCommon
|
|||
))
|
||||
def projectCore: Seq[Setting[_]] = Seq(
|
||||
name <<= thisProject(_.id),
|
||||
logManager <<= extraLoggers(LogManager.defaults),
|
||||
runnerSetting
|
||||
)
|
||||
def paths = Seq(
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ object Keys
|
|||
val showSuccess = SettingKey[Boolean]("show-success", "If true, displays a success message after running a command successfully.")
|
||||
val showTiming = SettingKey[Boolean]("show-timing", "If true, the command success message includes the completion time.")
|
||||
val timingFormat = SettingKey[java.text.DateFormat]("timing-format", "The format used for displaying the completion time.")
|
||||
val extraLoggers = SettingKey[ScopedKey[_] => Seq[AbstractLogger]]("extra-loggers", "A function that provides additional loggers for a given setting.")
|
||||
val logManager = SettingKey[LogManager]("log-manager", "The log manager, which creates Loggers for different contexts.")
|
||||
val logBuffered = SettingKey[Boolean]("log-buffered", "True if logging should be buffered until work completes.")
|
||||
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ object LogManager
|
|||
manager(data, task, to)
|
||||
}
|
||||
lazy val default: LogManager = withLoggers()
|
||||
def defaults(extra: ScopedKey[_] => Seq[AbstractLogger]): LogManager = withLoggers(extra = extra)
|
||||
|
||||
def defaultScreen: AbstractLogger = ConsoleLogger()
|
||||
def defaultBacked(useColor: Boolean): PrintWriter => AbstractLogger =
|
||||
|
|
@ -24,13 +25,13 @@ object LogManager
|
|||
|
||||
def withScreenLogger(mk: => AbstractLogger): LogManager = withLoggers(mk)
|
||||
|
||||
def withLoggers(screen: => AbstractLogger = defaultScreen, backed: PrintWriter => AbstractLogger = defaultBacked(ConsoleLogger.formatEnabled)): LogManager =
|
||||
def withLoggers(screen: => AbstractLogger = defaultScreen, backed: PrintWriter => AbstractLogger = defaultBacked(ConsoleLogger.formatEnabled), extra: ScopedKey[_] => Seq[AbstractLogger] = _ => Nil): LogManager =
|
||||
new LogManager {
|
||||
def apply(data: Settings[Scope], task: ScopedKey[_], to: PrintWriter): Logger =
|
||||
defaultLogger(data, task, screen, backed(to))
|
||||
defaultLogger(data, task, screen, backed(to), extra(task).toList)
|
||||
}
|
||||
|
||||
def defaultLogger(data: Settings[Scope], task: ScopedKey[_], console: AbstractLogger, backed: AbstractLogger): Logger =
|
||||
def defaultLogger(data: Settings[Scope], task: ScopedKey[_], console: AbstractLogger, backed: AbstractLogger, extra: List[AbstractLogger]): Logger =
|
||||
{
|
||||
val scope = task.scope
|
||||
def getOr[T](key: AttributeKey[T], default: T): T = data.get(scope, key) getOrElse default
|
||||
|
|
@ -39,9 +40,9 @@ object LogManager
|
|||
val screenTrace = getOr(traceLevel.key, -1)
|
||||
val backingTrace = getOr(persistTraceLevel.key, Int.MaxValue)
|
||||
|
||||
val multi = new MultiLogger(console :: backed :: Nil)
|
||||
val multi = new MultiLogger(console :: backed :: extra)
|
||||
// sets multi to the most verbose for clients that inspect the current level
|
||||
multi setLevel Level.union(backingLevel, screenLevel)
|
||||
multi setLevel Level.unionAll(backingLevel :: screenLevel :: extra.map(_.getLevel))
|
||||
// set the specific levels
|
||||
console setLevel screenLevel
|
||||
backed setLevel backingLevel
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ object Level extends Enumeration
|
|||
val SuccessLabel = "success"
|
||||
|
||||
def union(a: Value, b: Value) = if(a.id < b.id) a else b
|
||||
def unionAll(vs: Seq[Value]) = vs reduceLeft union
|
||||
|
||||
/** Returns the level with the given name wrapped in Some, or None if no level exists for that name. */
|
||||
def apply(s: String) = values.find(s == _.toString)
|
||||
|
|
|
|||
Loading…
Reference in New Issue