Transfer logging,trace levels from old to new global loggers.

This commit is contained in:
Mark Harrah 2013-10-24 16:34:16 -04:00
parent 57306e6257
commit fb1437cf36
2 changed files with 19 additions and 1 deletions

View File

@ -65,9 +65,22 @@ object MainLoop
def runWithNewLog(state: State, logBacking: GlobalLogBacking): RunNext =
Using.fileWriter(append = true)(logBacking.file) { writer =>
val out = new java.io.PrintWriter(writer)
val loggedState = state.copy(globalLogging = state.globalLogging.newLogger(out, logBacking))
val newLogging = state.globalLogging.newLogger(out, logBacking)
transferLevels(state, newLogging)
val loggedState = state.copy(globalLogging = newLogging)
try run(loggedState) finally out.close()
}
/** Transfers logging and trace levels from the old global loggers to the new ones. */
private[this] def transferLevels(state: State, logging: GlobalLogging) {
val old = state.globalLogging
Logger.transferLevels(old.backed, logging.backed)
(old.full, logging.full) match { // well, this is a hack
case (oldLog: AbstractLogger, newLog: AbstractLogger) => Logger.transferLevels(oldLog, newLog)
case _ => ()
}
}
sealed trait RunNext
final class ClearGlobalLog(val state: State) extends RunNext
final class KeepGlobalLog(val state: State) extends RunNext

View File

@ -40,6 +40,11 @@ abstract class AbstractLogger extends Logger
object Logger
{
def transferLevels(oldLog: AbstractLogger, newLog: AbstractLogger) {
newLog.setLevel(oldLog.getLevel)
newLog.setTrace(oldLog.getTrace)
}
// make public in 0.13
private[sbt] val Null: AbstractLogger = new AbstractLogger {
def getLevel: Level.Value = Level.Error