如何检测声纳中的log-and-swallow?

时间:2015-05-21 15:54:03

标签: error-handling sonarqube

开箱即用,Sonar将接受这样的代码:

try {
    tryStuff();
} catch (UserException e) {
    LOG.log(Level.WARN, USER_EXCEPTION_MESSAGE, e);
}

此处记录异常,但可以继续执行。应该重新抛出异常,或者采取一些补偿措施来纠正它。一个非空的catch块检查似乎是合理的,但是通过在catch块中放入一个log语句来解决这个问题。像这样的代码只比吞下异常的代码稍微好一些,可以说更糟糕,因为在顶级错误处理程序中进行日志记录以保持一致性并确保不会记录未处理的异常更好

有没有办法让Sonar在执行检查时有效地忽略日志语句?或者我是否必须编写自定义规则来执行此操作?