diff --git a/main/command/src/main/scala/sbt/MainLoop.scala b/main/command/src/main/scala/sbt/MainLoop.scala index d3c3e703c..ad9829ef6 100644 --- a/main/command/src/main/scala/sbt/MainLoop.scala +++ b/main/command/src/main/scala/sbt/MainLoop.scala @@ -49,7 +49,7 @@ 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 = logBacking.newLogger(out, logBacking)) + val loggedState = state.copy(globalLogging = state.globalLogging.newLogger(out, logBacking)) try run(loggedState) finally out.close() } sealed trait RunNext diff --git a/main/src/main/scala/sbt/Main.scala b/main/src/main/scala/sbt/Main.scala index 624072a00..c853f341b 100644 --- a/main/src/main/scala/sbt/Main.scala +++ b/main/src/main/scala/sbt/Main.scala @@ -52,7 +52,7 @@ object StandardMain val console = ConsoleOut.systemOutOverwrite(ConsoleOut.overwriteContaining("Resolving ")) def initialGlobalLogging: GlobalLogging = - GlobalLogging.initial((pw, glb) => MainLogging.globalDefault(pw,glb,console), File.createTempFile("sbt",".log"), console) + GlobalLogging.initial(MainLogging.globalDefault(console), File.createTempFile("sbt",".log"), console) def initialState(configuration: xsbti.AppConfiguration, initialDefinitions: Seq[Command], preCommands: Seq[String]): State = { diff --git a/util/log/src/main/scala/sbt/GlobalLogging.scala b/util/log/src/main/scala/sbt/GlobalLogging.scala index 91b9a040f..63eb9805a 100644 --- a/util/log/src/main/scala/sbt/GlobalLogging.scala +++ b/util/log/src/main/scala/sbt/GlobalLogging.scala @@ -10,39 +10,34 @@ package sbt * `full` is the current global logger. It should not be set directly because it is generated as needed from `backing.newLogger`. * `console` is where all logging from all ConsoleLoggers should go. * `backed` is the Logger that other loggers should feed into. -* `backing` tracks the files that persist the global logging. */ -final case class GlobalLogging(full: Logger, console: ConsoleOut, backed: AbstractLogger, backing: GlobalLogBacking) +* `backing` tracks the files that persist the global logging. +* `newLogger` creates a new global logging configuration from a sink and backing configuration. +*/ +final case class GlobalLogging(full: Logger, console: ConsoleOut, backed: AbstractLogger, backing: GlobalLogBacking, newLogger: (PrintWriter, GlobalLogBacking) => GlobalLogging) /** Tracks the files that persist the global logging. * `file` is the current backing file. `last` is the previous backing file, if there is one. -* `newLogger` creates a new global logging configuration from a sink and backing configuration. * `newBackingFile` creates a new temporary location for the next backing file. */ -final case class GlobalLogBacking(file: File, last: Option[File], newLogger: (PrintWriter, GlobalLogBacking) => GlobalLogging, newBackingFile: () => File) +final case class GlobalLogBacking(file: File, last: Option[File], newBackingFile: () => File) { /** Shifts the current backing file to `last` and sets the current backing to `newFile`. */ - def shift(newFile: File) = GlobalLogBacking(newFile, Some(file), newLogger, newBackingFile) + def shift(newFile: File) = GlobalLogBacking(newFile, Some(file), newBackingFile) /** Shifts the current backing file to `last` and sets the current backing to a new temporary file generated by `newBackingFile`. */ def shiftNew() = shift(newBackingFile()) /** If there is a previous backing file in `last`, that becomes the current backing file and the previous backing is cleared. * Otherwise, no changes are made. */ - def unshift = GlobalLogBacking(last getOrElse file, None, newLogger, newBackingFile) + def unshift = GlobalLogBacking(last getOrElse file, None, newBackingFile) } -object GlobalLogBacking -{ - def apply(newLogger: (PrintWriter, GlobalLogBacking) => GlobalLogging, newBackingFile: => File): GlobalLogBacking = - GlobalLogBacking(newBackingFile, None, newLogger, newBackingFile _) +object GlobalLogBacking { + def apply(newBackingFile: => File): GlobalLogBacking = GlobalLogBacking(newBackingFile, None, newBackingFile _) } object GlobalLogging { - @deprecated("Explicitly specify standard out.", "0.13.0") - def initial(newLogger: (PrintWriter, GlobalLogBacking) => GlobalLogging, newBackingFile: => File): GlobalLogging = - initial(newLogger, newBackingFile, ConsoleOut.systemOut) - def initial(newLogger: (PrintWriter, GlobalLogBacking) => GlobalLogging, newBackingFile: => File, console: ConsoleOut): GlobalLogging = { val log = ConsoleLogger(console) - GlobalLogging(log, console, log, GlobalLogBacking(newLogger, newBackingFile)) + GlobalLogging(log, console, log, GlobalLogBacking(newBackingFile), newLogger) } } \ No newline at end of file diff --git a/util/log/src/main/scala/sbt/MainLogging.scala b/util/log/src/main/scala/sbt/MainLogging.scala index abed543c7..5611dbd48 100644 --- a/util/log/src/main/scala/sbt/MainLogging.scala +++ b/util/log/src/main/scala/sbt/MainLogging.scala @@ -18,15 +18,14 @@ object MainLogging multi: Logger } - @deprecated("Explicitly specify the console output.", "0.13.0") - def globalDefault(writer: PrintWriter, backing: GlobalLogBacking): GlobalLogging = - globalDefault(writer, backing, ConsoleOut.systemOut) - - def globalDefault(writer: PrintWriter, backing: GlobalLogBacking, console: ConsoleOut): GlobalLogging = + def globalDefault(console: ConsoleOut): (PrintWriter, GlobalLogBacking) => GlobalLogging = { - val backed = defaultBacked()(writer) - val full = multiLogger(defaultMultiConfig(console, backed ) ) - GlobalLogging(full, console, backed, backing) + lazy val f: (PrintWriter, GlobalLogBacking) => GlobalLogging = (writer, backing) => { + val backed = defaultBacked()(writer) + val full = multiLogger(defaultMultiConfig(console, backed ) ) + GlobalLogging(full, console, backed, backing, f) + } + f } @deprecated("Explicitly specify the console output.", "0.13.0")