[JAVA] e.toString(), e.getMessage(), e.printStackTrace() 예외처리

 

예외(Exception)란

프로그램 실행 중 발생할 수 있는 정상적인 범위를 벗어난 경우에 처리를 하기 위한 방법입니다.

 

프로그램 실행 중보면 중요하게 처리해야 하는 부분중에

에러가 발생하였을때 예외처리를 하여 로그를 어떻게 남길것인지도 포함됩니다.

JAVA에서 try catch 문으로 감싸서 에러를 처리할때 로그를 남기는 방법은 다양합니다.

 

아래 예제를 통해 에러가 발생시 각 유형별로 어떻게 출력되는지 확인해보겠습니다.

String 에 문자열을 넣은다음, 이 문자열을 int로 바꿔서 강제로 Exception을 발생시킬게요. 

 

JAVA Exception 에러 출력

e.getMessage() : 에러의 원인을 간단하게 출력합니다.

e.toString() : 에러의 Exception 내용과 원인을 출력합니다.

e.printStackTrace() : 에러의 발생근원지를 찾아서 단계별로 에러를 출력합니다.

 

e.getMessage() 에러 출력

package joon;

public class codeTest {
    public static void main(String[] args) throws Exception{
        try{
        /* int로 형변환이 안되는 문자열을 넣어 강제로 Exception 발생 */
            String product = "사과";
            int productCnt = Integer.valueOf(product);
        }catch (Exception e){
            System.out.println(e.getMessage());
        }
    }
}

Exception 처리 결과

-> For input string: "사과"

e.getMessage() 은 정말 Exception의 유형도 없이 정말 간단하게 왜 에러가 발생하였는지 보여주기만 합니다.

 

 

e.toString() 에러 출력

package joon;

public class codeTest {
    public static void main(String[] args) throws Exception{
        try{
            String product = "사과";
            int productCnt = Integer.valueOf(product);
        }catch (Exception e){
            System.out.println(e.toString());
        }
    }
}

Exception 처리 결과

-> java.lang.NumberFormatException: For input string: "사과"

e.toString() 은 어떤 Exception이 발생하였으며, 원인이유를 보여주네요. 하지만 에러의 발생위치는 보여주지않습니다.

에러는 발생했지만 위 로그만 가지고는 에러의 위치를 찾기는 힘들죠.

 

e.printStackTrace() 에러 출력

package joon;

public class codeTest {
    public static void main(String[] args) throws Exception{
        try{
            String product = "사과";
            int productCnt = Integer.valueOf(product);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

Exception 처리결과

-> java.lang.NumberFormatException: For input string: "사과" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:580) at java.lang.Integer.valueOf(Integer.java:766) at joon.codeTest.main(codeTest.java:9)

Exception 이 발생한 이유와 위치는 어디에서 발생했는지 전체적인 단계를 다 출력합니다.

codeTest.java의 9번째 라인에서 에러가 발생하였다고 나오네요.

위치까지 정확하게 알려주어서 어디서 에러가 발생하였는지 빠르게 파악이 가능합니다.

 

log4에서는 e.printStackTrace()를 log 안에 담을수 없기 떄문에

log.error("error : ", e); 로 사용하시면 됩니다.

 

 

 

댓글

Designed by JB FACTORY