作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我们公司刚刚开始了一个 Sonar 农场。我对我们的代码质量很好奇并希望改进。
我有一个包含此类记录器调用的代码:
LOGGER.error(String.format("Cannot load object in status %s (%s)", status, statusDescription), e);
LOGGER.info(String.format("%s object(s) loaded in status %s (%s)", objects.size(), status, statusDescription));
Sonar 触发规则 squid:S262,仅有条件地调用方法“先决条件”并且日志记录参数不需要评估。由这两行触发的规则。
关于这个,我不太确定了解发生了什么。解释接缝不太适合我的用例。 Sonar 文档提供了这个例子:
logger.log(Level.DEBUG, "Something went wrong: " + message); // Noncompliant; string concatenation performed even when log level too high to show DEBUG messages
我完全理解(调试不会记录到生产中,因此会发生不必要的操作)。但是对于信息和错误级别,我假设您无论如何都想记录它。此外,就我而言,我希望两者都被记录下来。
哪种方法好?不使用 String.format 以不同方式重写?将 Sonar 调整为不在信息/错误级别上触发?就忽略这个 Sonar ?还有别的吗?
最佳答案
您的连接将在记录器中的条件检查之前完成。因此,如果您调用记录器 10 次并且评估返回 false,您的字符串也将无缘无故地连接 10 次。记录器将在评估通过后处理所有连接和格式设置,并且需要打印一些内容,这样您就可以节省无用的操作。
LOGGER.error("Cannot load object in status {} ({})", status, statusDescription, e);
关于java - Sonar 违规 : Invoke method(s) only conditionally,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44282659/
与其说这是一个技术问题,不如说是一个政策问题。 开发应用程序时,如果附属机构提供的链接构成您内容的一部分,您是否可以显示该链接?例如,专门用于从 Affiliate Window 查找特定流派黑胶唱片
我是一名优秀的程序员,十分优秀!