0

我正在关注发生count的数量,exceptions并记录这些exceptions。所以我所做的是,我创建了一种方法addException来计算所有异常。

addException方法将接受两个参数,one is the String和 otherboolean 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);
    }
}

问题陈述:-

现在我正在寻找的是-

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

是否可以用同一种方法来做这两件事addException?如果标志为真以终止程序,则也使用适当的日志记录终止程序。

重写addException method来做到这一点的最佳方法是什么?谢谢您的帮助。

4

1 回答 1

0

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

是否可以在同一个 addException 方法中完成这两件事?如果标志为真以终止程序,则也使用适当的日志记录终止程序。

addException是的,如果需要,您可以传递异常本身和标志,而不是将 String 原因传递给方法。甚至可以在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 建议的链接:

计算 catch 块中发生的异常数量

于 2013-03-01T17:10:04.550 回答