2015-01-23 3 views
3

캐치되지 않은 예외에 대한 코드를 실행하기 위해 내 자신의 UncaughtExceptionHandler을 설정할 수 있다는 것을 알고 있지만 모든 코드 실행을 모든 에서 수행하는 방법이 있습니다. 모든 메서드에서 해당 메서드를 호출하지 않아도 예외가 발생했습니다. 단일 try-catch 블록?Java : 발견 된 모든 예외에 대한 호출 메서드

내 사용자 지정 코드는 캐치되지 않은 예외에 대한 스택 추적을 전자 메일로 보냅니다. 나는 또한 잡힌 예외에 대한 전자 메일을 원하지만 모든 단일 try-catch 문을 추적하여 추가하고 싶지 않습니다.

글로벌 예외 처리기 (UncaughtExceptionHandler에 대해 언급 했음)를 찾고 있지 않습니다. 글로벌 CAUGHT 예외 처리기를 찾고 있습니다.

+0

'try '다음에'catch (Exception e)'가 어떤 특별한 예외도 잡을 것입니다. – rzysia

+0

@ rzysia 확실한,'try'에서 예외가 발생했습니다. 그것은 OP가 찾고있는 것이 아닙니다. – MikeTheLiar

+1

'catch' 블록의 포인트는 여러분이 처리하는 방법을 알지 못하고 이메일을받을 필요가없는 예외를위한 것입니다. – SLaks

답변

2

모든 예외를 기록하도록 Exception 클래스를 변경하면됩니다. 이것은 부트 클래스 경로, 런타임 코드 삽입을 변경하거나 JVMTI를 사용하여 수행 할 수 있습니다.

시스템이 예상보다 많은 예외를 잡을 것으로 생각됩니다. 뭔가 잘못되었을 때 수천 통의 이메일을받을 수 있습니다.

+1

지나치게 복잡하게 들립니다. 차라리 프로그램의 모든 '캐치 (catch)'블록을 찾을 것이라고 생각합니다 ... – RockManX77777

+0

@ RockManX77777 내 생각이었습니다.) –

0

예외 처리 정책 및 전략을 다시 방문하시기 바랍니다. 예외가 발생하면 일반적으로 뭔가 잘못되었다는 뜻입니다. 예기치 않은 예외가 코드에서 발생하여 (데이터베이스 연결이 끊어 졌거나 파일을 찾을 수 없거나 네트워크에 연결할 수없는 경우 등) 코드의 버그로 인해 예기치 않은 문제가 발생합니다 (예 : NPE 마음에 온다 ...). 이러한 시나리오에서는 정상적인 프로그램 흐름을 계속할 수 없습니다.

번 예외가 발생하고 복구 방법을 알고있는 경우가 아니면 예외적 인 조건이 결국 예외가 아닙니다. 당신이 빨리 실패해야하는 경우

, 이메일 또는 통지 등

을 보내, 당신은 죽을 명시 적으로 스레드 또는 프로그램으로 예외를 처리 할 필요가 없습니다 당신은 스택 추적을 기록하는 UncaughtExceptionHandler을 사용할 수 있습니다

정상적인 프로그램 흐름을 성공적으로 복구하고 재개 할 수있는 상황은 내 의견으로는 훨씬 일반적이지 않으며 일반적으로 시스템의 정상적인 기능의 일부로 개발자/운영자에게 통보 할 것을 요구하지 않습니다. 예외 처리 가능). 따라서 특정 메시지와이 시나리오와 관련된 유용한 데이터를 기록하는 것만으로도 충분합니다 (예 : "경고 : 일시적인 오류 x가 복구되었습니다. 상태는 y 및 z입니다.").

관련 문제