2014-11-05 2 views
3

"같음"예외 로깅을 줄이는 효과적인 방법이 있습니까? 예를 들어동일한 예외 항목의 로깅 줄이기

는 :

java.lang.IllegalArgumentException: Wrong parameter, should be a float from 0 to 100 
at com.test.Foo.setAmount(Foo.java:93) 
at com.test.Bar.setAmounts(Bar.java:39) 
at com.test.Bar2.init(Bar2.java:152) 
at java.awt.event.InvocationEvent.dispatch(Unknown Source) [na:1.7.0_65] 
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) [na:1.7.0_65] 
at java.awt.EventQueue.access$200(Unknown Source) [na:1.7.0_65] 
at java.awt.EventQueue$3.run(Unknown Source) [na:1.7.0_65] 
at java.awt.EventQueue$3.run(Unknown Source) [na:1.7.0_65] 
at java.security.AccessController.doPrivileged(Native Method) [na:1.7.0_65] 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) [na:1.7.0_65] 
at java.awt.EventQueue.dispatchEvent(Unknown Source) [na:1.7.0_65] 
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) [na:1.7.0_65] 
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) [na:1.7.0_65] 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) [na:1.7.0_65] 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) [na:1.7.0_65] 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) [na:1.7.0_65] 
at java.awt.EventDispatchThread.run(Unknown Source) [na:1.7.0_65] 

이러한 예외는 특정 상황에서 초당 90 회 발생 될 수있다. AWT 핸들러를 사용하여 예외를 기록하고 모든 Swing 응용 프로그램을 "고정"할 수 있습니다.

마음에 떠오르는 첫 번째 해결 방법은 다른 스레드에서 예외를 기록하는 것이었지만 이러한 승인은 나중의 디버그에서 진짜 지옥 일 수 있습니다.

두 번째 생각은 WeakHashMap에 예외를 넣고 첫 번째 발생에만 예외를 기록하는 것이 었습니다. im은 예외에 대해 equals를 수행하는 방법과 충분히 빠르지는 확실하지 않습니다.

+0

예외가 발생하는 곳에 코드를 붙여 넣습니다. – SMA

+0

이 도움이 될까요? 예외가 제 3 자 lib에서 던졌습니다. 그리고 나는 프록시 리스너로부터 그것을 얻습니다. –

+0

예외를 얻으면 예외 객체 전체를 기록해서는 안됩니다. 메시지가 채워지면 exception.getMessage()를 사용해야합니다. 그것은 당신의 세 번째 부분 lib에 여부 thye 그것을 채 웁니다 여부에 따라 달라집니다. – SMA

답변

2

ExceptionWrapper 클래스를 작성하고 메시지와 스택 추적을 비교하는 equals() 메소드를 구현하면 어떨까요? 그런 다음 로거는 새로 발생한 예외가 추가 된 래퍼의 LinkedHashSet을 유지합니다. 로거는 예를 들어 세트를 기록합니다. 각 초 (또는 다른 시간 간격). 따라서 새로 추가 된 "동등한"예외는 이전을 대체합니다.