Java 如何在记录器语句中检测字符串连接?
有没有办法配置Checkstyle、PMD或FindBugs Maven插件来检测如下代码:Java 如何在记录器语句中检测字符串连接?,java,maven,checkstyle,findbugs,pmd,Java,Maven,Checkstyle,Findbugs,Pmd,有没有办法配置Checkstyle、PMD或FindBugs Maven插件来检测如下代码: logger.debug("string" + stringVariable); 而不是: logger.debug("format string {}", stringVariable); 像这样做 提及 或 提及 好问题 我刚刚发现了一系列关于findbugs的附加规则,涵盖了您的案例(以及其他一些): 检查SLF4J_FORMAT_SHOULD_CONST应允许您在格式字符串中查找字符串连接。
logger.debug("string" + stringVariable);
而不是:
logger.debug("format string {}", stringVariable);
像这样做
提及
或
提及
好问题
我刚刚发现了一系列关于findbugs的附加规则,涵盖了您的案例(以及其他一些):
检查
SLF4J_FORMAT_SHOULD_CONST
应允许您在格式字符串中查找字符串连接。除了Slava的帖子(最适合您的需要)之外,findbugs中还有检查字符串问题的方法(例如SBSC_使用_STRINGBUFFER_连接)以及检查该问题的模式。与您相关的信息应该是:
- ISB_TOSTRING_追加
- ISB\u无效\u字符串\u缓冲
- ISB_空字符串_追加
- ITC_继承_类型_检查
FB contrib几乎为findbugs添加了200个bug模式,因此它真的是值得的。4年后,但作为PMD的问题也值得发布。以下是使用XPath创建PMD规则的语法(配置规则的方法非常简单):
用户界面!两条注释:1)带“+”的字符串连接通常使用StringBuilder编译,这有时是可以接受的。在这种情况下使用String.format会使情况变得更糟,因为这种格式比简单的串联更复杂。2) 问题在于如何在记录器调用中检测字符串连接,而不是如何更好地处理它们。事实上,这个问题已经包含了一个记录器的示例,它已经实现了格式化。在这里找到了解释:性能()
logger.debug(String.format("format string %s ", stringVariable));
logger.debug(MessageFormat.format("format string {0}", new Object[]{stringVariable }));
//PrimaryPrefix/
Name[matches(@Image,'logger.trace|logger.debug|logger.info|logger.warn|logger.error|logger.fatal')]
/../../PrimarySuffix//ArgumentList/*[1]//AdditiveExpression