当一个方法生成对 STDERR 的写入时,有什么方法可以捕捉到吗?我正在尝试在每次 STDERR 写入时预先添加一些信息。
假设我们的方法是:
parser.thatGeneratesSTDERR();
它会产生类似的东西
第 37:29 行在字符“a”处没有可行的替代方案
我可以用一些可以捕获要写入的 stderr 的东西来包装它并预先附加一些信息,所以它看起来像这样:
文件:mybadfile.txt——第 37:29 行在字符“a”处没有可行的替代方案
我知道我可能可以深入研究编写 STDERR 的实际代码,但我真的不想这样做——我宁愿只在这个方法周围包装一些代码。
我应该注意,这种方法并不总是生成 STDERR——我试图捕捉它们的原因是它不应该生成任何 STDERR——但是因为它在很多文件(超过 40 个)上被调用,所以我永远不知道哪个文件正在生成错误消息——它需要很长时间才能找到。
更新 所以是的,我们可以更改我们的 STDERR - 我只是忘记了我需要在我的新 STDERR 中覆盖我的 println ......这是相关代码:
public static String errfile = "";
static {
final PrintStream currentErr = System.err;
PrintStream newErr = new PrintStream(currentErr)
{
public void println(String string) {
print("File: " + errfile + " --");
print(string);
super.println();
}
};
System.setErr(newErr);
}
然后对于我正在测试的每个文件,我所要做的就是将 errfile 更改为文件名,并且我的输出结果符合预期......
多谢!