我有办法拦截从外部JAR文件中使用的STDERR流吗?
我的情况是我使用STDERR for XYZ 我自己的程序,以及使用STDERR for ABC的外部JAR。我想合并两者,以便为最终用户正确格式化它们,但我无法弄清楚如何捕获或重定向或(什么是正确的术语?) JAR的STDERR?
谢谢,
答案 0 :(得分:2)
java程序中的标准错误流为System.err
,标准输出流为System.out
。
您可以使用System.setErr(java.io.PrintStream)和System.setOut将这些都覆盖到PrintStream对象。但这将在全球范围内取代。提供PrintStream的实现,该实现将执行格式化并将其设置为两者的标准错误流。
如果你有两个不同的进程,那么你可以从另一个processes's error流(作为输入流)读取它的内容(从中获取)并将其写入标准错误流。
答案 1 :(得分:0)
不是一个简单的解决方案,但您可以创建一个类加载器,java代理或预处理器来修改所选类的字节码,并替换对静态字段System.err的所有引用以访问您的自定义输出流。