gpt4 book ai didi

java - Sonar 违规 : Invoke method(s) only conditionally

转载 作者:搜寻专家 更新时间:2023-10-31 08:31:45 30 4
gpt4 key购买 nike

我们公司刚刚开始了一个 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com