반응형
String 문자열을 Integer 로 바꾸면 NumberFormatException 이 발생한다. 문제가 되는 변수 s 와 예외인 e 를 에러로그로 같이 출력하고 싶다면 아래처럼 만들 수 있다.
String s = "Hello world";
try {
Integer i = Integer.valueOf(s);
} catch (NumberFormatException e) {
logger.error("Failed to format {}", s, e);
}
그런데 해당 error 메서드 인자를 보면 String var1, Object var2, Obejct var3 다. 즉 exception 파라미터가 Object로 받게 된다.
package org.slf4j;
public interface Logger {
...
void error(String var1, Object var2, Object var3);
...
}
그래서 Throwable 을 받을 수 있도록 에러로그를 아래와 같이 수정한다.
log.error("this is error message : " + s, ex);
package org.slf4j;
public interface Logger {
...
void error(String var1, Throwable var2);
...
}
하지만 그렇게 하지 않아도 된다. slf4j 는 마지막 파라미터에 exception 이 있으면 알아서 stack trace 와 함께 NumberFormatException 을 출력한다(단 1.6.0 부터 가능, 그 이하 버전은 NumberFormatException 무시된다).
slf4j 가 개발자의 가장 가능성 있는 의도에 따라 Object 가 아닌 Throwable 로 해석을 한다. 만약 exception 파라미터를 마지막 인자로 안넣으면 일반 Object 로 다뤄서 stack trace 는 출력되지 않는다(그런데 그렇게 로그 만들면 안된다).
반응형
'Java' 카테고리의 다른 글
날짜 포맷 하위호환(기록용) (0) | 2022.01.04 |
---|---|
Commands and Events(Design Principles of Reactive Systems) (0) | 2021.12.22 |
The synchronous communication drawback(timing) (0) | 2021.11.12 |
Mono.defer (0) | 2021.11.11 |
The dark side of distributed systems (0) | 2021.11.04 |