我的sbt更新非常慢,我想看看详细情况会发生什么。
所以,我有:
sbt --debug update > sbtupdate.log
问题是日志没有每行的时间戳,如何启用它?
答案 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?
的回答中了解如何开发自己的记录器