=pro add log timestamps to all sbt output and enable sbt debug logging for multi-jvm for ssh debugging

This commit is contained in:
Johannes Rudolph 2018-02-05 17:53:51 +01:00
parent 0ea8c0d872
commit b82024681c
No known key found for this signature in database
GPG key ID: 4D293A24CCD39E19
2 changed files with 83 additions and 2 deletions

View file

@ -0,0 +1,67 @@
package akka
import java.io.PrintWriter
import java.time.LocalDateTime
import java.time.ZoneId
import java.time.format.DateTimeFormatter
import sbt._
import Keys._
import sbt.Def
import sbt.internal.LogManager
import sbt.internal.util.ConsoleOut
object AddLogTimestamps extends AutoPlugin {
val enableTimestamps: Boolean = CliOption("akka.log.timestamps", false).get
override def requires: Plugins = plugins.JvmPlugin
override def trigger: PluginTrigger = allRequirements
private val UTC = ZoneId.of("UTC")
override def projectSettings: Seq[Def.Setting[_]] = {
logManager := {
val original = logManager.value
if (enableTimestamps) {
val myOut = new PrintWriter(System.out) {
val dateTimeFormat = DateTimeFormatter.ofPattern("MM-dd HH:mm:ss.SSS")
var lastWasNewline = true
override def print(s: String): Unit = {
maybePrintTimestamp()
super.print(s)
lastWasNewline = s.endsWith("\n")
}
override def println(): Unit = {
super.println()
lastWasNewline = true
}
override def println(x: String): Unit = {
maybePrintTimestamp()
super.println(x)
lastWasNewline = true
}
private def maybePrintTimestamp(): Unit =
if (lastWasNewline) {
super.print('[')
super.print(dateTimeFormat.format(LocalDateTime.now(UTC)))
super.print("] ")
lastWasNewline = false
}
}
val myLogger = ConsoleOut.printWriterOut(myOut)
LogManager.defaults(extraLoggers.value, myLogger)
} else
original
}
}
}

View file

@ -4,7 +4,8 @@
package akka
import akka.TestExtras.Filter.Keys._
import com.typesafe.sbt.{ SbtScalariform, SbtMultiJvm }
import com.typesafe.sbt.MultiJvmPlugin.MultiJvmKeys.multiJvmCreateLogger
import com.typesafe.sbt.{SbtMultiJvm, SbtScalariform}
import com.typesafe.sbt.SbtMultiJvm.MultiJvmKeys._
import com.typesafe.sbt.SbtScalariform.ScalariformKeys
import sbt._
@ -59,7 +60,20 @@ object MultiNode extends AutoPlugin {
jvmOptions in MultiJvm := defaultMultiJvmOptions,
compileInputs in (MultiJvm, compile) := ((compileInputs in (MultiJvm, compile)) dependsOn (ScalariformKeys.format in MultiJvm)).value,
scalacOptions in MultiJvm := (scalacOptions in Test).value,
compile in MultiJvm := ((compile in MultiJvm) triggeredBy (compile in Test)).value) ++
compile in MultiJvm := ((compile in MultiJvm) triggeredBy (compile in Test)).value,
logLevel in multiJvmCreateLogger := Level.Debug, // to see ssh establishment
multiJvmCreateLogger in MultiJvm := { // to use normal sbt logging infra instead of custom sbt-multijvm-one
val previous = (multiJvmCreateLogger in MultiJvm).value
val logger = streams.value.log
(name: String) =>
new Logger {
def trace(t: => Throwable) { logger.trace(t) }
def success(message: => String) { success(message) }
def log(level: Level.Value, message: => String): Unit =
logger.log(level, s"[${scala.Console.BLUE}$name${scala.Console.RESET}] $message")
}
}
) ++
CliOptions.hostsFileName.map(multiNodeHostsFileName in MultiJvm := _) ++
CliOptions.javaName.map(multiNodeJavaName in MultiJvm := _) ++
CliOptions.targetDirName.map(multiNodeTargetDirName in MultiJvm := _) ++