我的sbt更新非常慢,我想看看詳細情況。在SBT中顯示調試模式的時間戳?
所以,我有:
sbt --debug update > sbtupdate.log
的問題是,該日誌沒有對每一行的時間戳,如何啓用它?
我的sbt更新非常慢,我想看看詳細情況。在SBT中顯示調試模式的時間戳?
所以,我有:
sbt --debug update > sbtupdate.log
的問題是,該日誌沒有對每一行的時間戳,如何啓用它?
據我所知,只有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
請閱讀鏈接的問題,它包含了有趣的其它響應。
我想你需要的是開發作爲Add a custom logger描述的定製記錄器:
設置extraLoggers可用於添加自定義記錄器。自定義 記錄器應該實現[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)
}
你可以找到關於如何圍繞:)開發自己的記錄器在我的回答Custom extraLogger not getting [success] messages in sbt?
感謝了很多詳細的說明! – anuni
一個不錯的工作 – anuni