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