拦截和解析记录器或控制台输出而不会打扰它

时间:2012-08-01 13:56:01

标签: java intercept system.out

我在使用Java方面遇到了一些麻烦。我想要的很简单, 我正在开发一个知名游戏mod的插件,Minecraft,我需要能够解析STOUT出现的每一行控制台输出。

我在互联网上环顾四周,但我似乎找不到任何可以用来做这件事的东西。我知道一些控制台输出是通过默认的Logger,有些是通过system.out。我有一个函数,parseConsole(String line)将解析该行并在它包含一个单词等时执行某些操作。我希望为控制台上显示的每一行输出调用此函数,但它不能中断flow,因为在我的函数解析之后,每一行仍然会被发送到控制台。

1 个答案:

答案 0 :(得分:2)

您可以使用System.setOut()替换控制台PrintStream。您可以将其替换为在通往控制台的途中检查文本的实现。

以下是您可以过滤的示例:

public class MyFilterPrintStream extends PrintStream {
  @Override public void print(String s) {
    // ... process output string here ...

    // pass along to actual console output
    super.print(s);
  }
}

// install my filter 
System.setOut(new MyFilterPrintStream(System.out));