是否有任何智能方法可以减少“等于”异常的记录?
例如:
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的应用程序。
首先想到的解决方法是在不同的线程中记录异常,但是这样的approch在以后的调试中可能真的很糟糕。
第二个想法是在WeakHashMap中放置异常并仅在第一次出现时记录异常。我不知道如何执行异常等于是否足够快。
答案 0 :(得分:5)
如果您想使用Logback,则会有一个名为DuplicateMessageFilter的过滤器会在重复一段时间后丢弃邮件。
答案 1 :(得分:2)
如果编写ExceptionWrapper类并实现比较消息和堆栈跟踪的equals()方法,该怎么办?然后logger保留包装器的LinkedHashSet,其中添加了新发生的异常。记录器记录Set例如每秒(或任何不同的时间间隔)。因此,新增的“相等”例外取代旧版。