Please Enable JavaScript!
Gon[ Enable JavaScript ]

Java 에서 Exception 의 내용을 추출하고 싶을 때

자바(JAVA)
반응형

Java 에서 Exception 의 내용을 추출하고 싶을 때

 

개발환경 : window 7 64bit, Eclipse Kepler, JDK 1.6

 

Java 에서 Exception 이 일어났을 때 콘솔에 출력하는 것 외에

따로 내용을 저장하고자 할 때 내용을 알아야 하는데

Excpetion 클래스에서 제공하는 함수들로는 알수 없다.

 

Apache commons 에서 제공하는 클래스 인데

org.apache.commons.lang3.exception.ExceptionUtils 이다.

위 클래스는 commons-lang3.jar 가 필요하다. 다운받을려면

아래 URL 로 가서 받으면 된다.

http://commons.apache.org/proper/commons-lang/download_lang.cgi

 

 

Eclipse 에서 Build path 로 다운받은 jar 를 추가한다.

 

이제 Junit Test case 클래스를 하나 만들어서 ExceptionUtils 의 각종 함수에

대해 테스트 해본다. 아래 샘플소스는 각 함수들의 값들을 로그에 찍어주는 예제이다.

테스트를 위해 Excpetion 객체를 3개 포함해서 throw 하였다.

주로 많이 사용하는 함수는 다음과 같다.

 

getMessage() : 제일 마지막 에러 타이틀을 출력한다.

getRootCauseMessage() : 제일마지막 에러 이전 에러 타이틀을 출력한다.

getStackTrace() : 에러의 모든 내용을 출력한다.

 

전체샘플소스는 다음과 같다.

 

@Test
public final void testTrace2() {
	try {
		throw new RuntimeException("Runtime Exception!!", new Exception(
				"Exception!!", new Throwable("Throwable !!")));

	} catch (Exception e) {
		System.out.println(" getMessage : " + ExceptionUtils.getMessage(e));
        System.out.println(" getRootCauseMessage : " + ExceptionUtils.getRootCauseMessage(e));
        System.out.println(" getThrowableCount : " + ExceptionUtils.getThrowableCount(e));
        System.out.println(" getThrowables : ");

        for (final Throwable element : ExceptionUtils.getThrowables(e)) {
           System.out.println(element.getMessage());
        }

        System.out.println(" indexOfThrowable(e,RuntimeException.class) : "
              + ExceptionUtils.indexOfThrowable(e, RuntimeException.class));
        System.out.println(" indexOfThrowable(e,Throwable.class) : "
              + ExceptionUtils.indexOfThrowable(e, Throwable.class));
        System.out.println(" indexOfType(e,RuntimeException.class) : "
              + ExceptionUtils.indexOfType(e, RuntimeException.class));
        System.out.println(" indexOfType(e,Throwable.class) : " 
              + ExceptionUtils.indexOfType(e, Throwable.class));
        System.out.println(" getCause : " + ExceptionUtils.getCause(e));
        System.out.println(" getRootCause : " + ExceptionUtils.getRootCause(e));
        System.out.println(" getRootCauseStackTrace : ");

        for (final String element : ExceptionUtils.getRootCauseStackTrace(e)) {
           System.out.println(element);
        }
	}
}

 

위 소스를 실행했을 때 로그에 출력되는 내용이다

getMessage : RuntimeException: Runtime Exception!!
 getRootCauseMessage : Throwable: Throwable !!
 getThrowableCount : 3
 getThrowables : 
Runtime Exception!!
Exception!!
Throwable !!
 indexOfThrowable(e,RuntimeException.class) : 0
 indexOfThrowable(e,Throwable.class) : 2
 indexOfType(e,RuntimeException.class) : 0
 indexOfType(e,Throwable.class) : 0
 getCause : java.lang.Exception: Exception!!
 getRootCause : java.lang.Throwable: Throwable !!
 getRootCauseStackTrace : 
java.lang.Throwable: Throwable !!
 [wrapped] java.lang.Exception: Exception!!
	at ExcpetionTest.testTrace2(ExcpetionTest.java:24)
 [wrapped] java.lang.RuntimeException: Runtime Exception!!
	at ExcpetionTest.testTrace2(ExcpetionTest.java:23)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
반응형
Posted by 녹두장군1
,