在SBT中显示调试模式的时间戳?

时间:2014-03-14 07:34:27

标签: sbt

我的sbt更新非常慢,我想看看详细情况会发生什么。

所以,我有:

sbt --debug update > sbtupdate.log

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

2 个答案:

答案 0 :(得分:4)

据我所知,仅使用SBT选项是不可能的。但是这个question提供了一个很好的解决方案。我将根据您的具体情况重新说明答案。以下所有内容都假设一个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

请阅读链接的问题,其中包含有趣的其他回复。

答案 1 :(得分:1)

我认为您需要的是按Add a custom logger

中所述开发自定义记录器
  

设置extraLoggers可用于添加自定义记录器。一个习俗   记录器应该实现[AbstractLogger]。 extraLoggers是一个功能   ScopedKey [_] =>序号[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)
}

您可以在我对Custom extraLogger not getting [success] messages in sbt?

的回答中了解如何开发自己的记录器