Ответ 1
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ. Пожалуйста, используйте с осторожностью, поскольку ответ может быть неполным или даже совершенно неправильным.
После консультаций с источниками sbt я понимаю, что extraLoggers
- это параметр, который является "Функция, которая предоставляет дополнительные регистраторы для заданной настройки." и эти additional loggers
являются дополнительными к стандартуMain.console.
Если бы это было возможно, вам пришлось бы установить logManager ссылку на extraLoggers
и свой собственный sbt.ConsoleOut в build.sbt
, например
logManager := LogManager.defaults(extraLoggers.value, new ConsoleOut {
val lockObject = System.out
def print(s: String): Unit = synchronized { print(s) }
def println(s: String): Unit = synchronized { println(s) }
def println(): Unit = synchronized {
System.out.println()
}
})
Однако он не будет работать, поскольку sbt.ConsoleOut
является запечатанным признаком и, следовательно, нет возможности использовать его за пределами файла, который был определен.
Сказав, что, по-моему, в sbt 0.13.1
невозможно "перехватить" сообщение [success]
, которое было напечатано, когда showSuccess
есть true
, поскольку он выходит из ConsoleOut
, который находится вне вашего контроля.
Что вы можете сделать с extraLoggers
, так это иметь собственное собственное ведение журнала для задач и streams.value.log.success("Succezz")
должно работать.
Образец build.sbt
с задачей extraLoggers
и t
для демонстрации пользовательского регистратора.
extraLoggers := {
val clientLogger = FullLogger {
new Logger {
def log(level: Level.Value, message: => String): Unit =
if(level >= Level.Info) println(s"+++ $message at $level")
def success(message: => String): Unit = println(s"+++ success: $message")
def trace(t: => Throwable): Unit = println(s"+++ trace: throwable: $t")
}
}
val currentFunction = extraLoggers.value
(key: ScopedKey[_]) => clientLogger +: currentFunction(key)
}
val t = taskKey[Unit]("Show extraLoggers")
t := {
println(s"Using extraLoggers")
val s: TaskStreams = streams.value
val log = s.log
log.debug("Saying hi...")
log.info("Hello!")
log.error("Error")
log.success("Succezz")
}
С файлом выполнение задачи t
дает следующий результат:
$ sbt
[info] Loading global plugins from /Users/jacek/.sbt/0.13/plugins
[info] Loading project definition from /Users/jacek/sandbox/sbt-0.13.1-extra-loggers/project
[info] Set current project to sbt-0-13-1-extra-loggers (in build file:/Users/jacek/sandbox/sbt-0.13.1-extra-loggers/)
[sbt-0-13-1-extra-loggers]> about
[info] This is sbt 0.13.1
[info] The current project is {file:/Users/jacek/sandbox/sbt-0.13.1-extra-loggers/}sbt-0-13-1-extra-loggers 0.1-SNAPSHOT
[info] The current project is built against Scala 2.10.3
[info] Available Plugins: com.typesafe.sbt.SbtGit, com.typesafe.sbt.SbtProguard, growl.GrowlingTests, org.sbtidea.SbtIdeaPlugin, np.Plugin, com.timushev.sbt.updates.UpdatesPlugin
[info] sbt, sbt plugins, and build definitions are using Scala 2.10.3
[sbt-0-13-1-extra-loggers]> t
Using extraLoggers
[info] Hello!
+++ Hello! at info
[error] Error
+++ Error at error
[success] Succezz
+++ success: Succezz
[success] Total time: 0 s, completed Dec 16, 2013 10:30:48 PM