2011-10-03 3 views
1

구성 파일의 메시지가 사용자에게 더 우스운 메시지 인 CustomExceptionClass를 작성했습니다.사용자 정의 예외입니다. 로그 할 곳

그런 다음 예외가 발생했을 때 로그에 남기를 원합니다. 문제가 발생하면 세부 정보를 알고 싶기 때문에 해결할 수 있기 때문입니다. 그래서 의심 스럽습니다.

log4j를 사용하여 이러한 예외를 기록 할 수있는 위치는 어디입니까? CustomExceptionClass 내부에서, 또는이 예외를 throw하는 메소드가이를 기록하게합니다.

답변

3

예외를 잡는 위치는 어디에서나 기록해야합니다. 어디서나 잡을 수 없다면 실제로 애플리케이션을 실행하는 방법에 달려 있습니다.

1

일반적으로 사용자 지정 예외에서 ToString 및/또는 GetMessage에 과부하를 걸고 표준별로 간단히 기록합니다.

3

특히 log4j에 대한 질문이있는 경우 확실하지 않지만 그 API는 log.error(Object,Throwable)을 호출하여 첫 ​​번째 매개 변수로 메시지를 전달하고 두 번째 매개 변수로 오류를 전달하기 만하면됩니다. (log은 당연히 Log4J를 로거 참조입니다.)

log.error를 호출하는 곳의 질문에 대해서는, Throwable 당신의 CustomExceptionClass 서브 클래스 내에서 log.error를 호출하지 않습니다. 대신 다음과 같이 결정을 내릴 것입니다 :

정확히 무슨 일이 일어 났는지에 대한 세부 정보를 기록하려고하지만이 세부 정보를 Exception의 하위 클래스에 넣지 않으려는 경우 오류를 던지기 전에 세부 정보를 기록하십시오 .

마찬가지로 예외가 잡히는 지 여부에 관계없이 특정 항목을 기록하려면 예외를 throw하기 전에이 작업을 수행해야합니다. 비공개 방식을 호출하는 사람은 상대적으로 거의 제어 할 수 없습니다.

그렇지 않으면 catch 블록에 로그인하십시오. 이를 통해 어떤 일이 발생했는지 그리고 애플리케이션이 어떻게 응답했는지 추적 할 수 있습니다. 처음 정보가 있다면 다른 사람들은 "무엇을 이해할 수 있습니까?"라는 코드를 읽어야합니다.

마지막으로 모든 스레드에 대해 catch되지 않는 예외 처리기를 사용하는 것이 좋습니다. 자세한 내용은 Thread.UncaughtExceptionHandler을 참조하십시오. 기본적으로 장기 실행 응용 프로그램에서 모든 예외를 최소한 기록해야합니다.

2

오류가 처음 생성되는 위치가 아닌 오류 처리 코드에 로그해야합니다.

관련 문제