mirror of https://github.com/sbt/sbt.git
Restore binary compatibility for LogManager.defaults
Although log manager is in the internal package, akka uses it and it seems worth preserving binary compatibility in their build, at least for sbt 1.4.0-M2. Once the community build is passing, we can consider reverting this.
This commit is contained in:
parent
8b5f212010
commit
74e407f4a1
|
|
@ -27,7 +27,7 @@ import sbt.internal.io.WatchState
|
|||
import sbt.internal.librarymanagement.{ CompatibilityWarningOptions, IvySbt }
|
||||
import sbt.internal.remotecache.RemoteCacheArtifact
|
||||
import sbt.internal.server.ServerHandler
|
||||
import sbt.internal.util.{ Appender, AttributeKey, ProgressState, SourcePosition }
|
||||
import sbt.internal.util.{ AttributeKey, ProgressState, SourcePosition }
|
||||
import sbt.io._
|
||||
import sbt.librarymanagement.Configurations.CompilerPlugin
|
||||
import sbt.librarymanagement.LibraryManagementCodec._
|
||||
|
|
@ -61,7 +61,7 @@ object Keys {
|
|||
val timingFormat = settingKey[java.text.DateFormat]("The format used for displaying the completion time.").withRank(CSetting)
|
||||
@deprecated("", "1.4.0")
|
||||
val extraLoggers = settingKey[ScopedKey[_] => Seq[XAppender]]("A function that provides additional loggers for a given setting.").withRank(DSetting)
|
||||
val extraAppenders = settingKey[ScopedKey[_] => Seq[Appender]]("A function that provides additional loggers for a given setting.").withRank(DSetting)
|
||||
val extraAppenders = settingKey[AppenderSupplier]("A function that provides additional loggers for a given setting.").withRank(DSetting)
|
||||
val useLog4J = settingKey[Boolean]("Toggles whether or not to use log4j for sbt internal loggers.").withRank(Invisible)
|
||||
val logManager = settingKey[LogManager]("The log manager, which creates Loggers for different contexts.").withRank(DSetting)
|
||||
private[sbt] val loggerContext = AttributeKey[LoggerContext]("sbt-logger-context", "The logger config which creates Loggers for different contexts.", Int.MaxValue)
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ import sbt.Scope.GlobalScope
|
|||
import sbt.internal.util.MainAppender._
|
||||
import sbt.internal.util._
|
||||
import sbt.util.{ Level, LogExchange, Logger, LoggerContext }
|
||||
import org.apache.logging.log4j.core.{ Appender => XAppender }
|
||||
|
||||
sealed abstract class LogManager {
|
||||
def apply(
|
||||
|
|
@ -44,6 +45,14 @@ sealed abstract class LogManager {
|
|||
backgroundLog(data, state, task, LoggerContext.globalContext)
|
||||
}
|
||||
|
||||
/**
|
||||
* A functional interface that allows us to preserve binary compatibility
|
||||
* for LogManager.defaults with the old log4j variant.
|
||||
*/
|
||||
trait AppenderSupplier {
|
||||
def apply(s: ScopedKey[_]): Seq[Appender]
|
||||
}
|
||||
|
||||
object LogManager {
|
||||
import java.util.concurrent.atomic.AtomicInteger
|
||||
private val generateId: AtomicInteger = new AtomicInteger
|
||||
|
|
@ -75,8 +84,14 @@ object LogManager {
|
|||
def defaultManager(console: ConsoleOut): LogManager =
|
||||
withLoggers((_, _) => defaultScreen(console))
|
||||
|
||||
@deprecated(
|
||||
"use defaults that takes AppenderSupplier instead of ScopedKey[_] => Seq[Appender]",
|
||||
"1.4.0"
|
||||
)
|
||||
def defaults(extra: ScopedKey[_] => Seq[XAppender], console: ConsoleOut): LogManager =
|
||||
defaults((sk: ScopedKey[_]) => extra(sk).map(new ConsoleAppenderFromLog4J("extra", _)), console)
|
||||
// This is called by Defaults.
|
||||
def defaults(extra: ScopedKey[_] => Seq[Appender], console: ConsoleOut): LogManager =
|
||||
def defaults(extra: AppenderSupplier, console: ConsoleOut): LogManager =
|
||||
withLoggers(
|
||||
(task, state) => defaultScreen(console, suppressedMessage(task, state)),
|
||||
extra = extra
|
||||
|
|
@ -89,14 +104,14 @@ object LogManager {
|
|||
screen: (ScopedKey[_], State) => Appender = (_, s) => defaultScreen(s.globalLogging.console),
|
||||
backed: PrintWriter => Appender = defaultBacked,
|
||||
relay: Unit => Appender = defaultRelay,
|
||||
extra: ScopedKey[_] => Seq[Appender] = _ => Nil
|
||||
extra: AppenderSupplier = _ => Nil
|
||||
): LogManager = new DefaultLogManager(screen, backed, relay, extra)
|
||||
|
||||
private class DefaultLogManager(
|
||||
screen: (ScopedKey[_], State) => Appender,
|
||||
backed: PrintWriter => Appender,
|
||||
relay: Unit => Appender,
|
||||
extra: ScopedKey[_] => Seq[Appender]
|
||||
extra: AppenderSupplier
|
||||
) extends LogManager {
|
||||
def apply(
|
||||
data: Settings[Scope],
|
||||
|
|
|
|||
Loading…
Reference in New Issue