显示SBT调试模式的时间戳



我的sbt更新非常慢,我想看看具体发生了什么

所以,我有:

sbt --debug update > sbtupdate.log

问题是日志没有每行的时间戳,如何启用它?

据我所知,只有SBT选项是不可能的。然而,这个问题提供了一个很好的解决方案。我会根据你的具体情况改写答案。以下所有内容都假设是Unix操作系统,但应该可以将其调整为Windows环境(如果使用Cygwin则很简单)。

首先,您需要一个名为predate.sh的脚本,它包含:
#!/bin/bash
while read line ; do
    echo "$(date): ${line}"
done

date命令可根据需要修改。然后,您必须使用chmod u+x predate.sh使该脚本可执行。

最后运行您的初始命令,并将标准输出管道到我们的新脚本:

sbt --debug update | ./predate.sh > sbtupdate.log

请阅读链接的问题,它包含有趣的其他回答

我认为您需要的是像添加自定义记录器:

中所描述的那样开发一个自定义记录器:

设置extraLoggers可用于添加自定义记录器。一个自定义logger应该实现[AbstractLogger]。extraLoggers是一个函数ScopedKey[_] => Seq[AbstractLogger]。这意味着它可以提供根据请求日志记录器的任务进行不同的日志记录。

在自定义记录器中,您将在消息前加上时间戳。

def datedPrintln = (m: String) =>
  println(s"+++ ${java.util.Calendar.getInstance().getTime()} $m")
extraLoggers := {
  val clientLogger = FullLogger {
    new Logger {
      def log(level: Level.Value, message: => String): Unit =
        if(level >= Level.Info) datedPrintln(s"$message at $level")
      def success(message: => String): Unit = datedPrintln(s"success: $message")
      def trace(t: => Throwable): Unit = datedPrintln(s"trace: throwable: $t")
    }
  }
  val currentFunction = extraLoggers.value
  (key: ScopedKey[_]) => clientLogger +: currentFunction(key)
}

你可以找到关于如何开发自己的记录器在我的回答自定义extraLogger没有得到[成功]消息?

最新更新