【发布时间】:2012-08-10 20:03:12
【问题描述】:
我需要在 Java 中监视控制台输出,我尝试了几种不同的方式来检索流式传输的输出,但我陷入了一些陷阱(循环相同的输出,只捕获一部分输出,丢失输出) 并决定以不同的方式进行。
我正在为流行游戏 Minecraft 的服务器开发一个 Java 插件,我需要能够监控其他插件的控制台输出。
我认为这样做的一个好方法是将控制台输出重定向到文件,然后设置一个重复的异步任务来检查文件,执行它需要做的任何事情,然后清除文件以获取更多输入。我想我可以通过简单地使用 System.setOut(PrintStream stream); 来做到这一点。以及我可以在 Google 上找到的众多指南之一。
但是有一个问题,这就是我今天在这里提问的原因。我需要控制台输出像平常一样留在控制台上,因此“镜像”。我无法编辑任何插件以在其他地方输出,它需要来自我的 Java 插件可以做的事情,而且仅限于此。当然,也许在对文件的每次预定检查时,我都可以将其全部重新打印回控制台,但这会导致一次打印块,这并不理想。我希望这是可能的。谢谢!
编辑:我认为我没有完全解释清楚。 “插件”的类由我正在开发的程序运行。我无法更改类的运行方式,也无法更改其他插件打印到控制台的方式。
我也不想将控制台输出定向到文件进行日志记录,这个想法只是在解析时将其保存在临时位置。理想情况下,我需要将控制台输出的每一行传递给一个函数 (parseString(String line)),该函数根据行的内容执行操作。另外,我不明白如何正确地逐行读取流内容,所以如果有人对如何阅读有任何想法,请告诉我。 :)
【问题讨论】:
-
java ... foo.jar | tee output.txt -
你是怎么运行这个的?在 Linux 平台上,您可以通过控制台将输出通过管道传输到
tee,它可以像控制台一样完成打印到文件的工作。 -
哦,我的世界模组制作者。我也是其中之一。
-
@Paul:我不能这样做,因为插件实际上是在主程序开始运行后运行的,我也无法编辑它。 Carl:请看我给 Paul 的消息,Wug:Minecraft Bukkit 插件开发,而不是改装 :)