All Downloads are FREE. Search and download functionalities are using the official Maven repository.

sbt.MultiLogger.scala Maven / Gradle / Ivy


/* sbt -- Simple Build Tool
 * Copyright 2008, 2009, 2010 Mark Harrah
 */
package sbt

// note that setting the logging level on this logger has no effect on its behavior, only
//   on the behavior of the delegates.
class MultiLogger(delegates: List[AbstractLogger]) extends BasicLogger {
  override lazy val ansiCodesSupported = delegates exists supported
  private[this] lazy val allSupportCodes = delegates forall supported
  private[this] def supported = (_: AbstractLogger).ansiCodesSupported

  override def setLevel(newLevel: Level.Value) {
    super.setLevel(newLevel)
    dispatch(new SetLevel(newLevel))
  }
  override def setTrace(level: Int) {
    super.setTrace(level)
    dispatch(new SetTrace(level))
  }
  override def setSuccessEnabled(flag: Boolean) {
    super.setSuccessEnabled(flag)
    dispatch(new SetSuccess(flag))
  }
  def trace(t: => Throwable) { dispatch(new Trace(t)) }
  def log(level: Level.Value, message: => String) { dispatch(new Log(level, message)) }
  def success(message: => String) { dispatch(new Success(message)) }
  def logAll(events: Seq[LogEvent]) { delegates.foreach(_.logAll(events)) }
  def control(event: ControlEvent.Value, message: => String) { delegates.foreach(_.control(event, message)) }
  private[this] def dispatch(event: LogEvent) {
    val plainEvent = if (allSupportCodes) event else removeEscapes(event)
    for (d <- delegates)
      if (d.ansiCodesSupported)
        d.log(event)
      else
        d.log(plainEvent)
  }

  private[this] def removeEscapes(event: LogEvent): LogEvent =
    {
      import ConsoleLogger.{ removeEscapeSequences => rm }
      event match {
        case s: Success => new Success(rm(s.msg))
        case l: Log => new Log(l.level, rm(l.msg))
        case ce: ControlEvent => new ControlEvent(ce.event, rm(ce.msg))
        case _: Trace | _: SetLevel | _: SetTrace | _: SetSuccess => event
      }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy