2010-12-27 3 views
0

예외가 무한 루프에 걸린 경우가있었습니다. 스택 추적은 매우 커서 모든 것을 기록합니다.예외 로깅 하위 시스템의 처리량이 제한됩니까? 그렇다면 어떻게?

오라클 데이터베이스가 넘쳐 흐르고 리두 로그가 크기 제한에 도달했을 때 db가 중지되었습니다.

편집 : 물론 가장 중요한 것은 무한 루프의 원인을 찾아 시스템의 버그를 수정하는 것입니다. 우리는 이미 그것을했고 그것은 여기서 질문이 아닙니다. 시스템에는 더 많은 버그가있을 수 있습니다 (Windows 서비스이고 계속 실행 중입니다).이 경우 하나의 응용 프로그램이 전체 DB를 파손 시켰습니다. 즉, 해당 Oracle DB의 모든 응용 프로그램을 의미합니다.

저는 주로 건축 학적으로 당신의 경험에 관심이 있습니다. 그리고 그것은 log4net, log4j 등과 같은 다른 로깅 프레임 워크에서 가져온 것입니다. 예외의 홍수를 어떻게 처리합니까? 다른 예외와 마찬가지로 처리하십시오.

답변

2

로깅을 제한하는 무한 루프의 근본 원인에 대해 더 걱정할 것입니다.

나는 예외를 잡아 내고, 스택 추적을 기록하고, 다시 던질 수있는 메소드를 코드에서 검사 할 것이다. 나는 잡기와 다시 던지기가 예외 처리가 아니라고 주장 할 것이다. 클래스가 진정으로 예외를 처리 할 수없는 경우 누군가가 처리 할 수있는 단일 지점에 도달 할 때까지 단순히 예외를 버리는 것이 좋습니다.

다시 기록 하시겠습니까? 당신은 얼마나 자주 그들을 내뿜습니까? 당연히 큰 거래 하나도 없지, 그렇지?

+0

+1 디버깅 '취급'이 의도하지 않은 원인이 될 수 있습니다. –

+0

아니요, 큰 거래가 하나도 없습니다. 이 경우 개발 DB 및 리두 로그 AFAIK는 며칠 (매일) 자동으로 플러시됩니다 (자동). –

2

상황에 따라 예외 로그가 서비스 거부를 야기하지 않도록하기위한 확실한 메커니즘이 있어야한다고 생각합니다.

Windows 이벤트 로그를 사용하는 경우 로그가 가득 차면 오래된 레코드가 자동으로 지워지므로 자동으로 처리 할 수 ​​있습니다. DB 기반 시스템을 코딩하여 동일한 작업을 수행 할 수도 있습니다.

물론, 가능하면 어디에서든 이러한 오류를 제거하기 위해 할 수있는 모든 일을하고 싶습니다.

또 다른 옵션은 동일한 시간에 여러 개의 연속 된 오류를 감지하고 무시하는 것일 수 있습니다 ... 대신 간단히 count 속성/필드를 업데이트하십시오.

+0

코드에서 문제의 근본 원인을 찾는 데 도움이되는 데이터를 지울 수 있기 때문에 예외를 제거하지는 않을 것입니다. –

+0

모든 예외가 필요한 경우 모든 예외가 필요하며 질문이 어리석은 것처럼 보입니다. –

+0

그래서 유일한 예외는 모든 예외를 작성하지 않는 것입니까? –

1

리두 로그가없는 다른 데이터베이스에 로깅 할 수 있습니까? 그러면 프로덕션 데이터베이스가 보호됩니다. 모든 execeptions이 핸들러가 로그인하는 방법을 결정할 수

void OnExceptionOccurs(Exception ex, 
     string enduserFriendlyContextDescription, 
     string tecnicalContextDescription, 
     ILogger loggerBelongingToProcess) 

통과하는 중앙 exceptionhandler이 있고 중단에 대한 중앙 위치가 어디 갔지 우리의 응용 프로그램에서

방법에 대한 강조를 위해

+0

좋은 생각이지만, 아니, 우리는 로깅을 위해 별도의 db를 가질 수 없습니다. –

관련 문제