2010-09-08 20:45:22 +02:00
|
|
|
/* sbt -- Simple Build Tool
|
|
|
|
|
* Copyright 2010 Mark Harrah
|
|
|
|
|
*/
|
|
|
|
|
package sbt
|
|
|
|
|
|
|
|
|
|
import java.io.PrintWriter
|
2011-07-24 23:36:42 +02:00
|
|
|
import java.io.File
|
2010-09-08 20:45:22 +02:00
|
|
|
import LogManager._
|
|
|
|
|
import std.Transform
|
2011-01-19 00:24:11 +01:00
|
|
|
import Project.ScopedKey
|
2011-07-24 23:36:42 +02:00
|
|
|
import Scope.GlobalScope
|
2012-01-29 20:36:27 +01:00
|
|
|
import MainLogging._
|
2011-07-24 23:36:42 +02:00
|
|
|
import Keys.{logLevel, logManager, persistLogLevel, persistTraceLevel, state, traceLevel}
|
2012-05-20 00:20:19 +02:00
|
|
|
import scala.Console.{BLUE,RESET}
|
2010-09-08 20:45:22 +02:00
|
|
|
|
|
|
|
|
object LogManager
|
|
|
|
|
{
|
2011-10-30 23:39:18 +01:00
|
|
|
def construct(data: Settings[Scope], state: State) = (task: ScopedKey[_], to: PrintWriter) =>
|
2011-04-13 02:33:29 +02:00
|
|
|
{
|
|
|
|
|
val manager = logManager in task.scope get data getOrElse default
|
2011-10-30 23:39:18 +01:00
|
|
|
manager(data, state, task, to)
|
2011-04-13 02:33:29 +02:00
|
|
|
}
|
|
|
|
|
lazy val default: LogManager = withLoggers()
|
|
|
|
|
|
2012-05-20 00:20:19 +02:00
|
|
|
def defaults(extra: ScopedKey[_] => Seq[AbstractLogger]): LogManager =
|
|
|
|
|
withLoggers((task,state) => defaultScreen(suppressedMessage(task, state)), extra = extra)
|
|
|
|
|
|
|
|
|
|
def withScreenLogger(mk: (ScopedKey[_], State) => AbstractLogger): LogManager = withLoggers(screen = mk)
|
2011-04-13 02:33:29 +02:00
|
|
|
|
2012-05-20 00:20:19 +02:00
|
|
|
def withLoggers(screen: (ScopedKey[_], State) => AbstractLogger = (sk, s) => defaultScreen(), backed: PrintWriter => AbstractLogger = defaultBacked(), extra: ScopedKey[_] => Seq[AbstractLogger] = _ => Nil): LogManager =
|
2011-04-13 02:33:29 +02:00
|
|
|
new LogManager {
|
2011-10-30 23:39:18 +01:00
|
|
|
def apply(data: Settings[Scope], state: State, task: ScopedKey[_], to: PrintWriter): Logger =
|
2012-05-20 00:20:19 +02:00
|
|
|
defaultLogger(data, state, task, screen(task, state), backed(to), extra(task).toList)
|
2011-04-13 02:33:29 +02:00
|
|
|
}
|
|
|
|
|
|
2011-10-30 23:39:18 +01:00
|
|
|
def defaultLogger(data: Settings[Scope], state: State, task: ScopedKey[_], console: AbstractLogger, backed: AbstractLogger, extra: List[AbstractLogger]): Logger =
|
2010-09-08 20:45:22 +02:00
|
|
|
{
|
2011-02-06 03:39:34 +01:00
|
|
|
val scope = task.scope
|
2011-03-21 03:54:01 +01:00
|
|
|
def getOr[T](key: AttributeKey[T], default: T): T = data.get(scope, key) getOrElse default
|
|
|
|
|
val screenLevel = getOr(logLevel.key, Level.Info)
|
|
|
|
|
val backingLevel = getOr(persistLogLevel.key, Level.Debug)
|
2012-06-23 04:11:24 +02:00
|
|
|
val screenTrace = getOr(traceLevel.key, defaultTraceLevel(state))
|
2011-03-21 03:54:01 +01:00
|
|
|
val backingTrace = getOr(persistTraceLevel.key, Int.MaxValue)
|
2012-01-29 20:36:27 +01:00
|
|
|
val extraBacked = state.globalLogging.backed :: Nil
|
2011-07-24 23:36:42 +02:00
|
|
|
multiLogger( new MultiLoggerConfig(console, backed, extraBacked ::: extra, screenLevel, backingLevel, screenTrace, backingTrace) )
|
|
|
|
|
}
|
2012-06-23 04:11:24 +02:00
|
|
|
def defaultTraceLevel(state: State): Int =
|
|
|
|
|
if(state.interactive) -1 else Int.MaxValue
|
2012-05-20 00:20:19 +02:00
|
|
|
def suppressedMessage(key: ScopedKey[_], state: State): SuppressedTraceContext => Option[String] =
|
|
|
|
|
{
|
|
|
|
|
lazy val display = Project.showContextKey(state)
|
|
|
|
|
def commandBase = "last " + display(unwrapStreamsKey(key))
|
|
|
|
|
def command(useColor: Boolean) = if(useColor) BLUE + commandBase + RESET else "'" + commandBase + "'"
|
|
|
|
|
context => Some( "Stack trace suppressed: run %s for the full output.".format(command(context.useColor)))
|
|
|
|
|
}
|
|
|
|
|
def unwrapStreamsKey(key: ScopedKey[_]): ScopedKey[_] = key.scope.task match {
|
|
|
|
|
case Select(task) => ScopedKey(key.scope.copy(task = Global), task)
|
|
|
|
|
case _ => key // should never get here
|
|
|
|
|
}
|
2011-04-13 02:33:29 +02:00
|
|
|
}
|
2012-01-29 20:36:27 +01:00
|
|
|
|
2011-04-13 02:33:29 +02:00
|
|
|
trait LogManager
|
|
|
|
|
{
|
2011-10-30 23:39:18 +01:00
|
|
|
def apply(data: Settings[Scope], state: State, task: ScopedKey[_], writer: PrintWriter): Logger
|
2011-07-24 23:36:42 +02:00
|
|
|
}
|