Трассировка стека моего исключения выводится по-разному, если я использую exception.printStackTrace () или если я использую logger.error («message», исключение).Например, у меня есть исключение:
public class TestException extends RuntimeException{
private int status;
public TestException(String message, int status) {
super(message);
this.status = status;
}
public TestException(String message, Throwable cause, int status) {
super(message, cause);
this.status = status;
}
@Override
public String toString() {
return super.toString() + ", status=" + status;
}
}
Как видите, я переопределил метод toString, который печатает мой статус исключения.
В основном методе я создал два TestException, одно является причиной другого:
public static void main(String[] args) {
TestException innerException = new TestException("some inner test", 1);
TestException exception = new TestException("some text", innerException, 2);
exception.printStackTrace();
LOGGER.error(exception.toString(), exception);
}
После этого exception.printStackTrace () печатает:
test.App$TestException: some text, status=2
at test.App.main(App.java:66)
Caused by: test.App$TestException: some inner test, status=1
at test.App.main(ErrorHandler.java:65)
Как видите, printStackTrace использует метод toString моего исключения и записывает исключениестатус, но LOGGER.error печатает без него:
11:44:17.153 [main] ERROR test.App - test.App$TestException: some text, status=2
test.App$TestException: some text
at test.App.main(App.java:66) [classes/:?]
Caused by: test.App$TestException: some inner test
at test.App.main(App.java:65) ~[classes/:?]
Как настроить мой регистратор на использование метода toString моих исключений при печати трассировки стека, так же как и для exception.printStackTrace ()?
Я использую log4j2, стандартная конфигурация весенней загрузки 2.1.3.