Sonarqube 如何更改声纳中的乌贼规则?

Sonarqube 如何更改声纳中的乌贼规则?,sonarqube,squid,Sonarqube,Squid,我对SonarQube和Squid(以及CheckStyle和FindBugs和PMD)还不熟悉。我用的是SonarQube 4.1.1。以及默认的“Sonar way with Findbugs”质量概要文件来评估我的一些Java项目 在我的分析结果中,我从Squid得到了大量相同的关键问题: 异常处理程序应该提供一些上下文并保留 处理捕获的异常时的原始异常,必须有两个 信息应该被记录,或者出现在一个重新发布中 例外情况: 一些背景,以方便复制的问题 原始的异常,用于其消息和堆栈跟踪 在我

我对SonarQube和Squid(以及CheckStyle和FindBugs和PMD)还不熟悉。我用的是SonarQube 4.1.1。以及默认的“Sonar way with Findbugs”质量概要文件来评估我的一些Java项目

在我的分析结果中,我从Squid得到了大量相同的关键问题:

异常处理程序应该提供一些上下文并保留 处理捕获的异常时的原始异常,必须有两个 信息应该被记录,或者出现在一个重新发布中 例外情况:

  • 一些背景,以方便复制的问题
  • 原始的异常,用于其消息和堆栈跟踪
在我的代码中,我使用一个记录器,例如

catch(Exception e) {
    LOG.error(SampleClass.class.getSimpleName() + ": " + e);
}
为什么这条规则被取消了?将记录该异常。是吗,因为我不使用“记录器”,而是使用“日志”


我的第二个问题是:我在哪里可以看到和更改Squid规则,或者添加一些我自己的规则?就我对FindBug、CheckStyle和PMD的理解而言,我可以编写自己的规则。鱿鱼也可以吗

我认为触发该规则是因为您正在记录来自异常e的简单toString()消息,而不是完整堆栈跟踪。差不多

LOG.error(SampleClass.class.getSimpleName() + ": " + e, e); 
这将符合规则

SonarQube在每个规则定义中都有很好的兼容/不兼容代码示例。在问题或质量配置文件中展开规则的名称以查看示例

您可以通过创建您自己的从“Sonar Way…”继承的配置文件来更改默认质量配置文件的(某些方面),然后更改规则。要做到这一点,您需要具有SonarQube的管理员访问权限,然后导航到质量配置文件以开始

例如,考虑到遗留代码中出现的次数,我们的团队认为您正在研究的特定问题不应该是关键问题。我们以继承Sonar的方式创建自己的配置文件,并且很容易将此规则的严重性降低到Major。我们修改了许多规则,更改了阈值和/或正则表达式,以更好地满足我们的需要。我们认为没有必要编写新的规则,所以除了建议检查文档之外,我无法告诉您如何编写新规则。

试试这个


Log.e(标记,e.getMessage(),e)

您可以为SonarQube定义自己的规则。请查看此问题,了解保持文档链接最新的持续尝试。

在我看来,此特定规则似乎过于严格。我处理异常的方式需要更加灵活。旧的(pre-Squid)规则往往抱怨异常处理程序什么也不做,而此规则现在要求每个异常处理程序都需要共享原始异常的消息和堆栈。我已经将我的团队项目的规则降级为次要规则,因为我们有将近800个违规行为,其中很少有重要的违规行为。一旦得到团队其他成员的同意,我打算反对这条规则。我将回到旧的不赞成的规则

在我看来,如果我的代码正在调用一段外部代码,当我报告异常时,我不需要通过该代码段共享堆栈跟踪。使用
NumberFormatException
调试我的代码的人可能不关心NFE在数字解析中经过了多少层,他们可能只关心我的代码未能验证数字以及在代码中的何处查找修复。抑制原始堆栈跟踪对我来说很有意义