如何在logger语句中检测字符串连接?

时间:2013-11-12 07:02:04

标签: java maven checkstyle findbugs pmd

有没有办法配置Checkstyle,PMD或FindBugs Maven插件来检测这样的代码:

logger.debug("string" + stringVariable);

而不是:

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

4 个答案:

答案 0 :(得分:5)

很棒的问题!

我刚刚为findbugs找到了一系列其他规则,涵盖了你的案例(还有更多):https://github.com/eller86/findbugs-slf4j

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

答案 1 :(得分: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几乎为findbug添加了200个bug模式,所以它非常值得。

答案 2 :(得分: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

答案 3 :(得分:-1)

这样做。

参考String.format()

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

参考MessageFormat.format()

logger.debug(MessageFormat.format("format string {0}", new Object[]{stringVariable }));