Merge pull request #24505 from jrudolph/jr/enable-sbt-log-timestamps

=pro add log timestamps to all sbt output and enable sbt debug logging for multi-jvm for ssh debugging
This commit is contained in:
Patrik Nordwall 2018-03-21 13:46:52 +01:00 committed by GitHub
commit 4cbc0494ca
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
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

@ -5,7 +5,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._
@ -60,7 +61,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 := _) ++