引用规则描述(SonarQube 4.5.5):
// Noncompliant - exception is lost (only message is preserved)
try { /* ... */ }
catch (Exception e) { LOGGER.info(e.getMessage()); }
通过向记录器提供异常类,可以将堆栈跟踪信息写入日志。
我们的代码库中的问题是:
通过遵循Tell, don't ask原则,我们将检查的异常用作正常执行路径的一部分,我们不希望它们导致不合理的大日志消息。
举几个例子:服务器响应错误代码,乐观锁导致数据库语句执行失败(并发用户)...
我的建议:将这种情况一分为二。
// Noncompliant - exception is lost (only message is preserved)
try { /* ... */ }
catch (Exception e) { LOGGER.info(e.getMessage()); }
和
// Compliant - exception is lost (only message is preserved) but there is business logic handling the situation
try {
/* ... */
} catch (Exception e) {
LOGGER.info(e.getMessage());
*/ exception handling */
}
规则squid:S00108(代码块不能为空)不会捕获此问题,因为存在日志记录语句。
这不合理吗?我错过了重要的事情吗?
注意:我已经重写了问题以阐明我的用例
最佳答案
我理解用于维护堆栈跟踪以及所有其他内容的参数,但是我认为对于
关于java - 为什么鱿鱼:S1166 not accept exception messages only when logging caught exceptions?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33032194/