2012-12-17 3 views
1

오류 처리를 디자인하는 방법에 관한 일반적인 질문이 있습니다. 내 코드에서 제 3 자 서비스를 사용하고 싶습니다. 일반적으로 클라이언트 클래스 내에서 서비스를 래핑합니다. 그렇다면 나머지 코드는 내 클라이언트 클래스와 만 처리하며 실제 서비스는 눈이 멀게됩니다. 내 클라이언트 클래스 오류를 기록 할 수있는 몇 가지 메커니즘이 있습니다. 그러나 서비스에서 예외를 포착하고 처리하기를 원하지 않습니다. 이상적으로는 예외 처리를 무시하고 예외가 외부로 전파되도록해야합니다. 그러나 예외를 기록하려면 다음과 같이해야합니다.예외가 발생할 때 기록 하시겠습니까?

try{ 
    .... // call 3rd party service; 
}catch(Exception e){ // e is triggered from the service; 
    Log.error("Oops, an error: " + e); // shall I log the exception?? 
    throw e; // don't swallow the exception; 
} 

한편으로 나는 이것을 원하지 않습니다. 예외 처리 및 로깅을 무시할 수 있습니다. 클라이언트 클래스의 호출자가 예외를 처리하거나 오류를 기록하도록합니다. 문제는 언제 예외를 기록해야합니까? 나는 몇 가지 일반적인 관행과 원리를 듣고 싶다. 고맙습니다.

+0

어떤 언어입니까? –

+0

Java는 언어입니다. – Steve

답변

1

모든 레벨에서 예외를 기록하지 마십시오. "최상위"수준에서만 기록하십시오. 로깅하지 않는 지점에서 로그를 남기면 예외가 누락 될 수 있습니다.

+0

간단한 지침. 사방에 적용 할 수는 없지만 내가 찾고있는 일입니다. – Steve

0

당신에게 달려 있습니다. 내 권고 사항은 예상치 못한 일이 발생했을 때 예외를 기록하는 것입니다. 물론 "예외"라는 이름은 이것이 항상 그렇다고 나타내지 만 반드시 그런 것은 아닙니다.

가끔씩 코드가 예외가 아닌 시나리오에 대한 예외를 반환합니다.

가끔씩 코드가 다른 코드를 호출하지만 어떤 경우에는 예외를 호출하지만 예외 집합은 "확인"이라고합니다.

가끔 예외가 발생하면 예기치 못한 일이 실제로 발생했음을 나타냅니다. 이는 대개 나쁜 일입니다. 로그를 남기거나 더 나은 방법으로 코드가 큰 소리로 불평을하는지 확인하십시오.

0

예외가 발생할 확률이 매우 낮 으면 이 아닌이 기록됩니다. 디버깅을 돕기 위해 예외를 기록하지 않는 유일한 이유는 계속해서 실행되는 경우입니다. 이 특성을 가진 예외가있는 경우 예외가 지속적으로 발생하지 않도록 코드를 작성하는 것이 좋습니다.

tl; dr : 예외가 발생했을 가능성이 희박하므로 로그하십시오.

+0

하지만 로그에 _where_? 모든 방법에서? Java가 checked exception을 사용한다는 것은 알고 있습니다. 아마도 Java에서는 이해할 수 있지만, C#과 같은 언어에서는 끔찍한 생각입니다. –

+0

나는 당신의 주장을 인정합니다. – AVP

관련 문제