개발을 하면서 try catch 문으로 Exception을 핸들링할 때 에러 로그를 남기죠!
이때 여러가지 선택지가 있습니다.
e.getClass()
e.getMessage()
e.toString()
e.printStackTrace()
등등
위의 메소드들이 각각 어떤것을 보여주는지 알아보겠습니다.
참고로 logging 라이브러리는 Slf4j 를 사용하였습니다.
@Slf4j
https://orange-makiyato.tistory.com/42
1. e.getClass()
try {
String name = "abcd";
int num = Integer.parseInt(name);
}
catch (Exception e) {
log.error("에러가 발생하였습니다. {}", e.getClass());
}
String 을 int 로 변환하려는 간단한 코드를 예로 보겠습니다.
불가능하니 Exception이 발생하겠죠?
출력된 내용을 보면
딱 어떤 Exception 종류인지만 나타냅니다.
2. e.getMessage()
try {
String name = "abcd";
int num = Integer.parseInt(name);
}
catch (Exception e) {
log.error("{}", e.getMessage());
}
e.getMessage() 는 에러가 난 원인(뭐때문에?) 만 출력해줍니다.
3. e.toString()
e.toString() 은 앞에서 본 e.getClass() 와 e.getMessage() 를 모두 보여줍니다.
간단하게 에러에 대한 내용을 보여주는 것이죠.
try {
String name = "abcd";
int num = Integer.parseInt(name);
}
catch (Exception e) {
log.error("{} : {}", e.getClass(), e.getMessage());
log.error("{}", e.toString());
}
내용이 동일한 것을 알 수 있습니다.
4. e.printStackTrace()
try {
String name = "abcd";
int num = Integer.parseInt(name);
}
catch (Exception e) {
e.printStackTrace();
}
e.printStackTrace() 는 e.getClass(), e.getMessage()에 추가로 어떤 흐름을 통해 에러가 났고 근원지가 어디인지까지 자세하게 보여줍니다. 가장 유용하게 볼 수 있겠죠?
미세 팁이긴 합니다만 혹시 바로 위의 e.printStackTrace() 코드에서 다른점을 발견하셨나요?
바로 Slf4j 를 사용한 log.error({}, e.printStackTrace()); 으로 작성하지 않았다는 겁니다!
실제로 이렇게 쓰면 빨간줄이 뜹니다.
왜냐하면 e.printStackTrace()는 Exception 정보를 바로 콘솔에 출력하고 void를 반환하기 때문입니다.
따라서 log.error("", e.printStackTrace());는 e.printStackTrace()의 반환값을 log.error()의 메세지로 전달하려고 하기 때문에 컴파일러가 이를 잘못된 사용으로 간주하여 빨간 줄을 표시합니다.
그래서 e.printStackTrace() 내용을 Slf4j 를 사용해서 출력하는 방법은 e 를 그대로 사용하는 것입니다.
try {
String name = "abcd";
int num = Integer.parseInt(name);
}
catch (Exception e) {
log.error("에러가 발생하였습니다.", e);
}
저처럼 '에러가 발생하였습니다.' 와 같은 특정 메세지도 출력하고 싶다면 위와같이 사용하면 되고, 그냥 Exception 객체의 스택 트레이스만 있어도 된다면 e.printStackTrace() 만 쓰시면 됩니다.
로그 내용은 모두 따로 수집하게 되는데요. 간혹 프로젝트 중에 모든 에러 내용을 다 출력하면 용량이 너무 많아진다고 필요한 것만 남기자고 할 수도 있습니다. 그건 프로젝트에 따라 맞춰서 하시면 되겠습니다. 제한을 주지 않는다면 e.printStackTrace() 를 사용하는게 가장 좋겠죠?
'Java' 카테고리의 다른 글
자바 저장 글 (0) | 2024.07.09 |
---|---|
HashMap이 저장되는 형태와 원리, heap, stack 메모리구조 (0) | 2024.06.10 |
Java Date 날짜, 시간 패턴 바꾸기 (0) | 2022.08.12 |
VO, DTO, Entity (0) | 2022.08.03 |
Java Optional (0) | 2022.07.29 |
댓글