计算异常并以相同的方法记录它

时间:2013-03-01 16:48:51

标签: java exception try-catch

我要count exceptions发生exceptions次,并同时记录这些addException。所以我做的是,我创建了一个方法addException,其中我计算所有异常。

one is the String方法将接受两个参数boolean flag,而另一个是catch,这意味着我们是否因为任何异常而终止程序。意思是,如果该标志为真,那么只要有任何异常,我就需要终止程序。

因此,如果您查看下面的addException块,我会调用catch (ClassNotFoundException e) { addException(e.getCause() != null ? e.getCause().toString() : e.toString(), Read.flagTerminate); LOG.error("Threw a ClassNotFoundException in " + getClass().getSimpleName(), e); } catch (SQLException e) { addException(e.getCause() != null ? e.getCause().toString() : e.toString(), Read.flagTerminate); //DAMN! I'm not.... LOG.error("Threw a SQLException while making connection to database in " + getClass().getSimpleName(), e); } /** * A simple method that will add the count of exceptions and name of * exception to a map * * @param cause * @param flagTerminate */ private static void addException(String cause, boolean flagTerminate) { AtomicInteger count = exceptionMap.get(cause); if (count == null) { count = new AtomicInteger(); AtomicInteger curCount = exceptionMap.putIfAbsent(cause, count); if (curCount != null) { count = curCount; } } count.incrementAndGet(); if(flagTerminate) { System.exit(1); } } 方法来计算异常,并且在方法调用之下我也会记录异常。

addException

问题陈述: -

现在我要找的是 -

有没有更清洁的方式做同样的事情?现在意思我在计算方法中的异常,然后在catch块内的下一行打印出异常。

是否可以使用相同的addException method方法执行这两项操作?如果该标志为true,则终止程序,然后使用正确的日志记录终止程序。

重写{{1}}的最佳方法是什么? 谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

  

有没有更清洁的方式做同样的事情?意思是对的   现在我在计算方法中的异常,然后打印出来   在catch块内的下一行中的异常。

     

是否可以在同一个addException中执行这两个操作   方法?如果该标志为true则终止该程序,那么   也可以使用正确的日志记录终止程序。

是的,不是将String cause传递给addException方法,而是可以根据需要传递异常本身和标志。甚至可以完全捕捉addException方法,如:

catch (ClassNotFoundException|SQLException e) {
    addException(e, Read.flagTerminate);
} 

catch (Exception e) {
    addException(e, Read.flagTerminate);
}

甚至:

catch (ClassNotFoundException e) {
    addException(e, Read.flagTerminate, "Threw a ClassNotFoundException in "); //An the addException method logs the message passed.    
} catch (SQLException e) {
    addException(e, Read.flagTerminate, "Threw a SQLException while making connection to database in ");
}

您可以在类中创建一个映射,其中存储了哪些异常应该停止执行,哪些不应该执行,因此您只需要addException(Exception e)方法。

您甚至可以为每种类型的异常创建一个具有本地化消息的属性文件,并默认记录该消息。

您还可以查看@perception建议的链接:

Counting the number of exceptions happening in catch block