<module name="RegexpSinglelineJava">
<property name="format" value="(LOGGER|LOG|logger|log)\.[a-z]+\(.*%s"/>
<property name="ignoreComments" value="true"/>
<property name="message" value="Formatting with %s in Log4J log strings is not allowed, use {} instead" />
</module>
1条答案
按热度按时间f45qwnt81#
可能没有标准检查来禁止此操作(至少in the official page)。
对于99%的情况,以下基于正则表达式(RegexpSingleLineJava)的自定义检查将起作用:
regexp定位一个logger,后面跟着一个点、多个字母(例如
info
、warn
、error
等)、左大括号和%s
,后面跟着一些任意字符。注解被忽略。限制:
%s
和LOGGER
不在同一行,checkstyle不会捕捉到错误(但是,格式字符串通常和LOGGER
在同一行,不像参数);(LOGGER|LOG|logger|log)
),checkstyle将不会捕获错误;编写一个自定义的Checkstyle检查可能有助于克服这些限制,但我不确定在真实的项目中是否值得。如果目标是告诉开发人员停止在日志中使用
%s
,而不是找到这种情况的 * 每一个单一的事件 *,那么使用单行正则表达式检查应该是完全可以的。