2017-09-02 44 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) –

相关问题