5

有没有办法配置 Checkstyle、PMD 或 FindBugs Maven 插件来检测如下代码:

logger.debug("string" + stringVariable);

代替:

logger.debug("format string {}", stringVariable);
4

4 回答 4

5

好问题!

我刚刚发现了一些关于 findbugs 的附加规则,这些规则涵盖了您的情况(以及更多):https ://github.com/eller86/findbugs-slf4j

检查SLF4J_FORMAT_SHOULD_BE_CONST应该允许您在格式字符串中找到字符串连接。

于 2013-11-12T10:13:01.867 回答
1

除了 Slava 的帖子(它应该最适合您的需求)之外,findbugs 中还有一些方法可以检查字符串问题(例如 SBSC_USE_STRINGBUFFER_CONCATENATION),而且fb-contrib也有检查模式。与您相关的应该是:

  • ISB_TOSTRING_APPENDING
  • ISB_INEFFICIENT_STRING_BUFFERING
  • ISB_EMPTY_STRING_APPENDING
  • ITC_INHERITANCE_TYPE_CHECKING
  • ...

FB-contrib 几乎为 findbugs 添加了 200 个错误模式,所以它真的很值得。

于 2013-11-13T08:13:29.337 回答
0

晚了 4 年,但值得发布,因为这个问题也适用于 PMD。以下是使用 XPath 创建 PMD 规则的语法(从这里开始配置规则的方法非常简短):

//PrimaryPrefix/
Name[matches(@Image,'logger.trace|logger.debug|logger.info|logger.warn|logger.error|logger.fatal')]
/../../PrimarySuffix//ArgumentList/*[1]//AdditiveExpression
于 2017-02-03T21:54:21.940 回答
-1

这样做。

参考String.format()

logger.debug(String.format("format string %s ", stringVariable));

或者

参考MessageFormat.format()

logger.debug(MessageFormat.format("format string {0}", new Object[]{stringVariable }));
于 2013-11-12T07:09:10.483 回答