【问题标题】:how to use sbt/amm scala script on pipe operator?如何在管道运算符上使用 sbt/amm scala 脚本?
【发布时间】:2018-02-11 01:46:37
【问题描述】:

我想用 scala 脚本处理日志输出。像这样:
java -jar app.jar | log.scjava -jar app.jar | amm log.sc 如何写一个log.sc处理app.jar打印日志?

动机

用更智能的方式替换 java -jar app.jar > app.log 来处理输出流。
从现在开始,我想按天将输出流保存到不同的文件中。

谢谢。

更新

想想这个例子:

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

它组装到Loop.jar,如何处理按日期打印日志到文件?

【问题讨论】:

    标签: scala sbt ammonite scala-script


    【解决方案1】:

    为什么不把对 java 的调用放在你的 Ammonite 脚本中。

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

    日志变量捕获输出,您可以让脚本将其写入一个命名的日志文件。

    你可以看到一个例子,我做了类似here 的事情。有一个来自another repository 的包含脚本,我在其中创建并命名了日志文件。

    【讨论】:

    • app.jar 是一个庞大的网络项目。 val log 不应该将结果保存在内存中。似乎导致了 java.lang.OutOfMemoryError 异常。你能写一些例子吗?
    • 我最初理解的方式是你想在启动应用程序时捕获终端输出,这就是我上面的建议。但是从您的示例中,您有这个应用程序正在执行您想要捕获的相当多的输出。在我看来,亚扪人不是你想要的。这听起来像是一个经典的日志记录用例,您应该研究在 Java/Scala 中处理日志记录的许多好的选项,例如 slf4j,例如 Scala wrapper
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多