java - 拦截并解析 Logger 或控制台输出而不干扰它

标签 java intercept system.out

我在使用 Java 时遇到了一些问题。我想要的其实很简单 我正在为著名游戏 Minecraft 的 mod 开发一个插件,我需要能够解析传入 STOUT 的每一行控制台输出。

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

最佳答案

您可以使用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));

关于java - 拦截并解析 Logger 或控制台输出而不干扰它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11760871/

相关文章:

java - 如何配置 Apache Tomcat 以在 catalina.out 文件的时间戳中输出时区?

java - child 的 id 不是在保留时从 parent 分配的

delphi - 如何拦截(检测)粘贴命令到 TMemo 中?

java - System.err.println和System.out.println处理的区别

java - ProcessBuilder.inheritIO() 将输出发送到错误的位置

java - Scala/Gradle 的 build.gradle 中包含什么

java - kafka java 客户端不消费 - 只是卡在 consumer.poll

c# - 检测 .NET 程序集以捕获单元测试

ios - 如何使用 NSURLProtocol 在 iOS 中拦截网络调用 (REST)

java - 系统.输出.打印。如何对打印输出进行编号? ( java )