2017-09-02 40 views
0

我想用scala腳本處理日誌輸出。像這樣:
java -jar app.jar | log.scjava -jar app.jar | amm log.sc 如何編寫log.sc處理app.jar打印日誌?如何在管道運算符上使用sbt/amm scala腳本?

動機

更換java -jar app.jar > app.log一些更聰明的處理輸出流的方式。
從現在開始,我希望將輸出流保存到不同的文件中,天數不變。

謝謝。

UPDATE

覺得這個例子:

object Main extends App { 
    var i = 0L 
    while(true) { 
    println("hello " + i) 
    i += 1 
    } 
} 

裝配到Loop.jar,我該怎麼處理打印日誌按日期文件?

回答

0

爲什麼不把你的調用Java到您的Ammonite腳本中。

val log = %%('java,"-jar","app.jar")

日誌變量捕獲輸出,你可以有腳本寫了一個名爲記錄文件。

你可以看到一個例子,我做了類似的事情here。有一個從another repository包含的腳本,我創建&名稱的日誌文件。

+0

'app.jar'是一個龐大的網絡項目。 'val log'不應該在內存中保存結果。它似乎導致了一個'java.lang.OutOfMemoryError'異常。你能寫一些例子嗎? – LoranceChen

+0

我最初理解的方式是,當您啓動應用程序時,您想捕獲終端輸出,這正是我上面提出的建議。但從你的例子你有這個應用程序正在做相當多的輸出,你想捕捉。在我看來,亞捫人不是你想要的。這聽起來像一個經典的日誌記錄用例,你應該研究處理Java/Scala中日誌記錄的許多好的選項,比如slf4j,例如這個[Scala wrapper](https://github.com/typesafehub/scala-logging) –

相關問題