Java:重复异常过滤?

时间:2013-07-21 11:02:05

标签: java exception-handling

我在免费托管上有一个JBoss EAP服务器,然后发生一种情况,使得应用程序开始在每个请求上抛出带有lenghty堆栈跟踪的异常。 这导致日志每天达到几十MB,并且在一段时间后,托管磁盘空间不足。

我想过滤异常。确切地说,我想要一些可以接受例外的事情并告诉我是否已经看到相同的例外。适用范围广。可能是缓存过期。

除了自己使用地图和检查异常外,还有什么选择?

我记得我已经看过一些RepeatedExceptionsHandler或类似的东西,我使用的Log4j,或者它可能是Hibernate,但无法在快速谷歌搜索中找到它。

3 个答案:

答案 0 :(得分:1)

我也用我的磁盘填充了日志文件,所以我感到很痛苦!我的第一直觉确实是RollingFileAppender解决方案的一个版本,但从长远来看最终为我工作的一件事实际上是完全卸载了这个问题。我使用名为Appygram的服务(诚然,我也提供的服务),您可以向其发送例外。您可以根据需要设置异常消息的格式,并且它具有基于API密钥的内置重复检测,因此您可以进行应用程序范围的检查。

就个人而言,我使用HTML格式化我的异常以使它们更易于阅读,因为我发送了大量数据,但您可以发送任何您想要的内容。您还可以使用Web界面浏览收到的异常,也可以将它们转发到电子邮件或任何其他Web服务。

无论如何,如果你做了类似的事情,你可以保持你的日志不被填充,因为信息从你的服务器上消失了,你不会被反复宰杀同样的例外。如果你最后特意检查Appygram,请告诉我,我可以指出一些有用的Java库来帮助你入门。

答案 1 :(得分:0)

您可以使用RollingFileAppender并正确配置它。您需要提供最大文件大小和要保留的文件数作为备份。这不会帮助您过滤异常,但它可以帮助您不用磁盘空间。

http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/RollingFileAppender.html

请参阅http://logging.apache.org/log4net/release/config-examples.html以获取此类配置的示例(“RollingFileAppender”下的部分)

答案 2 :(得分:0)

所以我实现了这个简单的计数器。

02:23:18,324 INFO  Characteristic: 46d21ef0{8a5b1c7c@293{b0d929ae@276{b0d929ae@182{de8e612a@241
02:23:18,324 ERROR Error rendering: /programovani/artificial_intelligence/covering_ai_theory.texy: java.lang.UnsupportedOperationException: Definition lists not supported yet.
        at cz.dynawest.jtexy.modules.ListModule$DefListPatternHandler.handle(ListModule.java:293)
        ...
02:23:19,956 INFO  Characteristic: 46d21ef0{8a5b1c7c@293{b0d929ae@276{b0d929ae@182{de8e612a@241
02:23:19,957 ERROR Recurring rendeding error: /programovani/artificial_intelligence/covering_ai_theory.texy

用法:

    catch( Exception ex ){
        int count = repeatedExDetector.countException( ex );
        if( count < 2 )
            log.error("Error rendering: " + path, ex);
        else
            log.error("Recurring rendering error: " + path);
        add( new TexyDocumentErrorPanel("document", "Error occured when loading document.", "Couldn't load: " + path, 500));
    }

实现:

On my blog