我们公司刚刚开办了一个声纳农场。我很好奇我们的代码质量,并希望改进。
我有一个包含此类记录器调用的代码:
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));
声纳触发规则鱿鱼: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?调整声纳不在信息/错误级别上触发?只是忽略这个声纳?还有别的吗?
答案 0 :(得分:9)
您的连接将在记录器中的条件检查之前完成。因此,如果您将记录器调用10次并且评估返回false,那么您的字符串也会无缘无故地连接10次。记录器在评估完成后将处理所有连接和格式化,并且需要打印一些内容,这样就可以节省无用的操作。
LOGGER.error("Cannot load object in status {} ({})", status, statusDescription, e);