Есть ли способ, которым я могу поймать, когда метод генерирует запись в STDERR?
Я пытаюсь получить некоторую информацию перед каждой записью STDERR.
скажем, наш метод:
parser.thatGeneratesSTDERR();
это сгенерирует что-то вроде
Строка 37:29 нет жизнеспособной альтернативы для символа 'a'
могу я просто обернуть это чем-то, что ловит stderr, который нужно написать, и предваряет некоторые
информация, поэтому она будет выглядеть так:
Файл: mybadfile.txt - строка 37:29 - нет подходящей альтернативы для символа 'a'
Я знаю, что мог бы, вероятно, копаться в реальном коде, который пишет STDERR, но я действительно не хочу этого делать - я бы просто вместо этого обернул некоторый код вокруг этого метода.
Я должен отметить, что этот метод не всегда генерирует STDERR - причина, по которой я пытаюсь их поймать, заключается в том, что он НЕ ДОЛЖЕН генерировать STDERR - но так как он вызывается для довольно многих файлов (более 40) Я никогда не знаю, какой файл генерирует сообщение об ошибке - поиск его занимает вечность.
UPDATE
так что, да, мы можем изменить наш STDERR - я просто забыл, что мне нужно переопределить мой println в моем новом STDERR ... вот соответствующий код:
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 на имя файла, и мой вывод получится ожидаемым ...
спасибо большое!