Java 减少相同异常的日志记录

Java 减少相同异常的日志记录,java,swing,logging,Java,Swing,Logging,有没有什么聪明的方法来减少“equals”异常的记录 例如: 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.

有没有什么聪明的方法来减少“equals”异常的记录

例如:

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中,并仅在第一次出现时记录异常。我不知道如何为异常执行equals,以及它是否足够快。

如果您编写一个ExceptionWrapper类并实现比较消息和堆栈跟踪的equals()方法,该怎么办。然后,记录器保存一组包装器,在其中添加新发生的异常。记录器记录集合,例如每秒(或任何不同的时间间隔)。因此,新添加的“equal”异常会替换旧的异常。

如果您想使用,有一个名为的过滤器,它会在某个重复之后删除消息。

将代码粘贴到引发异常的位置。这有帮助吗?异常从第三方库抛出,我确实从代理侦听器获取并记录它。当您获得异常时,您不应该将异常对象作为一个整体记录。如果填充了消息,则应使用exception.getMessage()。这取决于你的第三部分库是否填充它。