=pro add log timestamps to all sbt output and enable sbt debug logging for multi-jvm for ssh debugging
This commit is contained in:
parent
0ea8c0d872
commit
b82024681c
2 changed files with 83 additions and 2 deletions
67
project/AddLogTimestamps.scala
Normal file
67
project/AddLogTimestamps.scala
Normal 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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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 := _) ++
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue