我有一个相当大的项目,其中我的一位同事使用了记录器,但在调用记录器之前忘记放置“可记录”测试,如您所知,在日志消息中使用字符串连接时,这可能会大大降低效率。但是,一些记录器已得到适当保护。
我正在寻找可以在 Eclipse 中使用的正则表达式来搜索所有那些未受保护的记录器调用,但我找不到正确的正则表达式,并带有否定的后视功能。
这里有一些示例可以使这一点更清楚:
我想匹配这个:
logger.fine("Exception raised: " +
e.getClass().getName() + ". See console for details.");
我不想匹配这个:
if (logger.isLoggable(Level.FINE)) {
logger.fine("Exception raised: " +
e.getClass().getName() + ". See console for details.");
}
也不是这个:
if (logger.isLoggable(Level.FINE))
logger.fine("Exception raised: " +
e.getClass().getName() + ". See console for details.");
我不在乎匹配消息内容或记录器方法调用之后的任何内容(severe()、warning()、...),我所需要的只是拥有该logger.fine
部分。
到目前为止,我已经使用了这个正则表达式:
((?<!if\s?.?logger\.isLoggable.?Level.{0,20})logger.(severe|warning|info|fine|finer|finest))
但它匹配我不想匹配的东西。关于如何解决这个问题的任何想法?
代码是格式化的(缩进是用制表符完成的),这意味着我们可以对我们的期望非常严格。