카테고리 없음

36. 예외 포함, 스택 트레이스

sdafdq 2023. 10. 4. 13:16

예외 전환 시 꼭 기존 예외 포함해야 함.

어떤 예외에서 파생되어 왔는 지 알아야 예외의 이유를 아니까.

 

 

 

 

예외 log.info() 할 때 e 넣으면 스택 트레이스 확인할 수 있음.

log.info("ex", e)

저 메시지랑 그 뒤에 스택 트레이스 찍히기 시작.

 

예외는 로그 찍을 때 {} 문자열에 이렇게 바인딩 할 곳 넣어주지 않아도 알아서 잘 나옴.

 

 

    @Test
    void printEx(){
        Controller controller = new Controller();
        try {
            controller.request();
        }catch(Exception e){
            log.info("ex",e);
        }
    }
   
   
   static class Repository {
        public void call() {
            try {
                runSQL();
            } catch (SQLException e) {
                throw new RuntimeSQLException(e);
            }
        }

        public void runSQL () throws SQLException {
            throw new SQLException("sqlEx");
        }
    }

이거 찍어 보면, 

 

이렇게 전 예외까지도 같이 나온다.

 

예외 생성자를 throwable 하면 그렇다.

 

맨아래 Caused by 짤렸는데, 저게 전 예외이다.

전 예외 여러개 넣으면 Caused By 여러 개 나와서 전 예외에 대한 정보가 나온다.

 

제일 밑에 있는, 원초적인 에러의 원인을 제공하는 것을 root cause 라고 함

 

 

예외 전환 시에는 꼭, 기존 예외를 포함하자.

커스텀 예외 만들더라도 생성자 cause 넣을 수 있게끔  Throwable 인자로 받는 생성자를 추가시켜 주자.

 

static class RuntimeSQLException extends RuntimeException {
    public RuntimeSQLException() {
    }

    public RuntimeSQLException(Throwable cause) {
        super(cause);
    }
}