2016-06-20 2 views
11

예외 그룹화 기능이있는 로깅 솔루션이 있습니까? 내가 달성하고자하는 것은 예를 들어 100 초에 10 초 동안 예외가 기록되어 100 개의 스택 트레이스를 기록하지 않을 때입니다. RuntimeException was thrown 100 times: single stack trace here과 같은 것을 기록하고 싶습니다. log4j과 통합 된 것을 완성 할 수 있습니다.Java - 로그의 동일한 예외 그룹화

Ofc 거기에 예외 대기열이있는 로깅 외관을 만들 수있는 옵션이 있지만 어쩌면 이미 구현 된 것이있을 수 있습니다.

+1

그냥 생각 : 다른 스레드에 의해 유도 된 로그 인터레이스를 어떻게 처리할까요? 예 : 한 스레드가 X 번을 많이 기록하고 다른 스레드가 Y 번을 많이 기록하면 XYXYXYX Y로 끝날 수 있습니다. 이전 프로젝트에서 비슷한 작업을 수행해야했고 제 3 자 로깅 프레임 워크가 해결책이 아니 었습니다 (우리는 우리 자신의 그룹화 메커니즘을 구현했습니다 ....) – xav

+0

@xav 예, ofc 거기에 몇 가지 동시성 문제가있을 것입니다. 필자의 경우의 솔루션은 순서화 된 예외 또는 유사한 smth와 함께 상태를 저장하기위한 로깅 메서드/동시성 컬렉션을 동기화 할 수 있습니다. 그래서 X Y X Y X Y -> X X 3 Y X 3. 그룹화 메커니즘이 구현 된 방법에 대해 좀 더 자세히 설명해 주시겠습니까? – coolguy

+0

이런 종류의 동시성에 대해서는 말하지 않았습니다. * 동시에 로깅하는 두 개의 스레드가 있으면 log4j를 사용할 수 있습니다. 귀하의 코드에서'동기화 '를 사용하여 내가 얘기 한 문제에 전혀 도움이되지 않습니다. 나는 이런 종류의 경우에 대해 이야기했다 : 스레드 TX는 X를 기록하고, 2 초 후, 다른 스레드 TY는 Y를 기록하고, 2 초 후에 TX는 X를 기록하고, 2 초 후에 TY는 Y를 기록한다. 결과, 당신의 로그 파일은 XYXYX Y를 포함 할 것입니다 ... (예외적 인 하나의 스레드 당 하나의 로그 파일을 가지고 있다면 제외) – xav

답변

1

log handler implementation that groups logs을보고 이메일 주소로 보내주십시오.

해결책은 기본적으로 이며 을 사용하여 로그를 메모리에 저장합니다. 임계 값에 도달하거나 시스템이 닫히면 핸들러가 버퍼를 플러시합니다.

솔루션은 (Jut 기반) (java.util.logging)이지만 약간의 수정을 통해 자신 만의 log4j 솔루션을 빌드 할 수있는 기반이 될 수 있습니다. 그것은 나에게 좋았습니다. 희망이 도움이됩니다.