有没有办法配置 Checkstyle、PMD 或 FindBugs Maven 插件来检测如下代码:
logger.debug("string" + stringVariable);
代替:
logger.debug("format string {}", stringVariable);
有没有办法配置 Checkstyle、PMD 或 FindBugs Maven 插件来检测如下代码:
logger.debug("string" + stringVariable);
代替:
logger.debug("format string {}", stringVariable);
好问题!
我刚刚发现了一些关于 findbugs 的附加规则,这些规则涵盖了您的情况(以及更多):https ://github.com/eller86/findbugs-slf4j
检查SLF4J_FORMAT_SHOULD_BE_CONST
应该允许您在格式字符串中找到字符串连接。
除了 Slava 的帖子(它应该最适合您的需求)之外,findbugs 中还有一些方法可以检查字符串问题(例如 SBSC_USE_STRINGBUFFER_CONCATENATION),而且fb-contrib也有检查模式。与您相关的应该是:
FB-contrib 几乎为 findbugs 添加了 200 个错误模式,所以它真的很值得。
晚了 4 年,但值得发布,因为这个问题也适用于 PMD。以下是使用 XPath 创建 PMD 规则的语法(从这里开始配置规则的方法非常简短):
//PrimaryPrefix/
Name[matches(@Image,'logger.trace|logger.debug|logger.info|logger.warn|logger.error|logger.fatal')]
/../../PrimarySuffix//ArgumentList/*[1]//AdditiveExpression
这样做。
logger.debug(String.format("format string %s ", stringVariable));
或者
logger.debug(MessageFormat.format("format string {0}", new Object[]{stringVariable }));