В настоящее время я могу получить трассировку стека:
final StringWriter sw = new StringWriter();
final PrintWriter pw = new PrintWriter(sw, true);
throwable.printStackTrace(pw);
String stackTraceAsString = sw.getBuffer().toString();
но при вызове функций журнала, таких как errors (), debug () и т. д., я мог получить все трассировки стека только в одной строке, хотя строка трассировки стека содержит \r\n
. Хочу разделить его на несколько строк.
Изучая класс Appender:
@Override
protected void subAppend(LoggingEvent event) {
this.qw.write(this.layout.format(event));
if (this.layout.ignoresThrowable()) {
String[] s = event.getThrowableStrRep();
if (s != null) {
int len = s.length;
for (int i = 0; i < len; i++) {
this.qw.write(s[i]);
this.qw.write(Layout.LINE_SEP);
}
}
}
if (this.immediateFlush) {
this.qw.flush();
}
}
Тем не менее, он имеет дело только с исключением, которое было выброшено, но не было перехвачено. Поэтому я реализую настраиваемый аппендер:
public class CustomRollingFileAppender extends RollingFileAppender {
}
Я пытаюсь извлечь строку из переменной QuiteWriter внутри этого класса, заменить ее '\ r \ n' на Layout.LINE_SEP, но я не знаю, как ее извлечь.
exception
. Обратитесь к api error. Также, вероятно, проверьте этот вопрос http://stackoverflow.com/questions/1806378/log4j-not-adding-newlines-between-logfile-entries - person Utkarsh   schedule 29.07.2015