2011-03-21 2 views
0

내 모든 try/catch 코드에서 수퍼 클래스 Exception을 catch 할 수 있습니까? 그런 다음 특정 유형을 기록 할 수 있도록 어떤 util 클래스에서 예외 유형을 찾으십니까? 예를 들어 : (코드 만에서 일반적인 예외가에)자바에서 예외 처리

CustomLog{ 
    Logger log= .... 

    public static logTrace(Exception e){ 
    log.debug("name of exception: " + e.????); 
    } 

} 

SomeOtherClass{ 

    try{ 

    }catch(Exception e){ 
    CustomLog.logTrace(e); 
    } 

} 

또는 내 목표는 무엇인지에 대한 더 좋은 생각이있다?

+3

가능하지만 좋은 생각입니까? 이 솔루션에 동기를 부여하기 위해 try {}에 어떤 종류의 코드가 있습니까? 편집 : NM; 오해. – Bittrance

+0

'Logger'를 제공하는 패키지는 무엇입니까? log4j? slf4j? 평범한'java.util.logging'? –

+0

@Bittrance :하지만 그것이 좋은 지적이라고 생각합니다. '일반적인'예외만으로 실제로 해결할 수있는 문제는 무엇입니까? 특정 방식으로 예외를 포착하고 처리하려고합니다. 바로 그 점입니다. –

답변

0

보십시오 : 그것은 예외를 wrappered 경우

e.getClass().getName() 

그러나 당신이 원인의 로깅을 고려할 수 있습니다.

0

Exception.toString() 당신이 원하는 것을 줄 것이라고 생각합니다.

0

CustomLog가 Exception의 특수 클래스에 액세스 할 수 있으면 yes입니다.

당신은 당신의 때 CustomLog 코드 같은 것을 할도 수 : 의도가 예외에 대한 정보를 기록하는 것입니다 경우

logTrace(Exception ex) { 
    try { 
     throw ex; 
    } catch(CustomException ex) { 
     // specialized handling of CustomException 
    } catch(Exception ex) { 
     // unknown exception 
    } 
} 
+0

한 가지 면책 조항 : 예외를 기록하기를 원할 경우 실제로 toString(), getMessage() 및 그러한 메소드를 사용하는 것이 좋습니다.예외 클래스는 그 호출에 의미있는 결과를 제공해야합니다. 일반적으로이 논리를 로깅 패키지로 푸시하고 싶지는 않습니다. – Nick

2

가, 그럼 그냥 적절한 로깅 방법에 Exception을 전달하고 로거하자 당신을위한 작업 :

log.error("Exception caught", e) 

MostloggingAPIssupportThrowable 인수로 자신의 debug(), 0,123,762로등의 방법이있다. 당신이해야 할 진짜 이유가 없다면 바퀴를 재발 명할 필요가 없습니다.

아키텍처에 대한 질문 ("더 좋은 아이디어가 있습니다"부분)에는 다음과 같은 기본 규칙이 있습니다. 예외 (예 : 트랜잭션 롤백)에 대해 뭔가 할 수 있다면 잡아서 적당한. 당신이 그것을 복구 할 수 없다면, 당신의 방법에서 그것을 버리고 발신자가 그것을 돌보게하십시오.

궁극적으로 복구 할 수없는 예외는 스택을 컨테이너 (주 방법, 서블릿 컨테이너 또는 기타)로 전파합니다. 그런 다음 컨테이너는 로그를 작성하거나 경고를 보내거나 다른 방법으로 예외를 처리 할 수 ​​있습니다.

은 (사용자가 제안한 것처럼) 일반 Exception을 사용하지 마십시오. 정말로이 특정 상황에 적합한 지 확인하지 않으면 무언가를 캐치하고 기록한 다음 처리하지 않습니다. 예외를 처리 할 수 ​​없다면 현재 가지고있는 메소드에서 예외를 던져서 메소드를 상위로 처리하십시오.

+0

감사합니다.이 정보는 나에게 매우 유용합니다. – bmw0128

+0

@ bmw0128 - 괜찮습니다. [예외 처리] (http://stackoverflow.com/search?q=exception+handling+java)에 대한 StackOverflow를 검색하고 몇 가지 답변을 읽어보십시오. 그들은 당신에게 약간 통찰력을 제공 할 것입니다; 이 주제는 꽤 많이 다루어졌습니다. –

+1

나는 "일반적인 예외를 사용하지 말 것"에 대한 2 표를 줄 수 있기를 바란다. "catch (Exception e) {}"는 내 존재의 상처이다. "public void foo()는 Exception을 던진다. "뭔가 상처주고 싶다. –