捕获和修改从外部JAR发送的stderr

时间:2010-08-08 17:39:28

标签: java jar stderr

我有办法拦截从外部JAR文件中使用的STDERR流吗?

我的情况是我使用STDERR for XYZ 我自己的程序,以及使用STDERR for ABC的外部JAR。我想合并两者,以便为最终用户正确格式化它们,但我无法弄清楚如何捕获重定向或(什么是正确的术语?) JAR的STDERR?

谢谢,

2 个答案:

答案 0 :(得分:2)

java程序中的标准错误流为System.err,标准输出流为System.out

您可以使用System.setErr(java.io.PrintStream)和System.setOut将这些都覆盖到PrintStream对象。但这将在全球范围内取代。提供PrintStream的实现,该实现将执行格式化并将其设置为两者的标准错误流。

如果你有两个不同的进程,那么你可以从另一个processes's error流(作为输入流)读取它的内容(从中获取)并将其写入标准错误流。

答案 1 :(得分:0)

不是一个简单的解决方案,但您可以创建一个类加载器,java代理或预处理器来修改所选类的字节码,并替换对静态字段System.err的所有引用以访问您的自定义输出流。