当前位置: 首页 > 知识库问答 >
问题:

声纳违规:仅有条件地调用方法

郭炳
2023-03-14

我们公司刚刚建立了一个声纳农场。我对我们的代码质量很好奇,想改进。

我有一个代码包含这样的记录器调用:

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 doc提供了以下示例:

logger.log(Level.DEBUG, "Something went wrong: " + message);  // Noncompliant; string concatenation performed even when log level too high to show DEBUG messages

我完全理解(调试不会记录在生产中,因此会发生不必要的操作)。但对于信息和错误级别,我假设您无论如何都要记录它。此外,在我的例子中,我希望两者都被记录。

哪种方法好?重写不同不使用String.format?调整声纳以不在信息/错误级别开火?忽略这个的声纳?别的东西?


共有1个答案

苏宾鸿
2023-03-14

您的连接将在记录器中的条件检查之前完成。因此,如果您调用记录器10次,并且计算结果返回false,那么您的字符串也会无缘无故地连接10次。记录器将在通过评估后处理所有连接和格式化,并需要打印一些内容,这样可以节省无用操作的时间。

LOGGER.error("Cannot load object in status {} ({})", status, statusDescription, e);
 类似资料:
  • 部署自定义规则(如https://github.com/sonarsource/sonar-java/blob/master/java-checks/src/main/java/org/sonar/java/checks/useLessimportcheck.java)后,启动Sonarqube4.2时,在sonar启动期间引发以下异常: 上面提到的类应该在sslr-core-1.19.2.jar

  • 问题内容: 有没有一种方法可以有条件地声明Spring bean: 不必使用配置文件,这将很有用。我没有特定的用例,但这是我想到的。 问题答案: 你可以使用@Conditional从spring4或@ConditionalOnProperty从springBoot.。 Using Spring4 (only) 如果你不使用Spring Boot,这可能会过大。 首先,创建一个类,在其中可以访问:

  • 在哪里可以找到用于将规则导入到Sonar的XML文件的好文档和/或模式?在http://javadocs.sonarsource.org/5.1/apidocs/org/Sonar/api/server/rule/rulesdefinitionxmlloader.html上有一些文档,但是它并不准确(例如,description标记为可选,但是Sonar如果缺少它就会失败),并且没有描述每个元素代

  • “公共类型、方法和字段(API)应该用Javadoc文档化”的规则在Sonarqube6.5中似乎不起作用。 我在Java Quality Profile中激活了该规则,将该Profile设置为默认值,并通过命令运行我的Java代码库。

  • 问题内容: 我想与Jenkins一起针对Maven 2项目启动SonarQube分析。我首先在构建配置中使用了目标。 但是我刚刚找到了Jenkins的SonarQube插件。为什么要使用它?这是更好的做法,为什么? 问题答案: 您当然可以做一个简单的,这将起作用。 另一方面,还有用于Jenkins的SonarQube插件,它将使配置更加容易。例如,您将能够在一个位置(Jenkins的配置部分)定义