См. Ответ Алекса как более чистый.
Вы можете написать собственную реализацию org.apache.log4j.spi.ThrowableRenderer
:
http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/spi/ThrowableRenderer.html
Затем отредактируйте свою конфигурацию log4j:
log4j.throwableRenderer = your-custom-class-name
ThrowableRenderer
возвращает массив String
с.Вот ваш код:
String prefix = "myPrefix"; // Or some constant
List<String> l = new LinkedList<String>();
l.add(String.format("%s %s: %s", prefix, t.getClass().getName(), t.getMessage()));
for (StackTraceElement ste: t.getStackTrace()){
l.add(String.format("%s %s", prefix, ste.toString()));
}
return (String[]) l.toArray();
Другая идея заключается в том, чтобы напечатать Throwable
в PrintWriter
, который оборачивает некоторую Writer
, которая записывает в память, и затем повторять строки, ограниченные line.separator
, добавляя каждую строку в список:
StringWriter sw = new StringWriter();
t.printStackTrace(new PrintWriter(sw));
List<String> l = new LinkedList<String>();
for (String s: sw.toString().split(System.lineSeparator())) {
l.add(String.format("%s %s", prefix, s));
}
return (String[]) l.toArray();