没有包围if-PMD Violation的日志块

时间:2014-06-09 06:21:27

标签: java logging pmd

package com;

import org.apache.log4j.Logger;

public class LoggerTest {
private static final Logger logger = Logger.getLogger(LoggerTest.class);

public static void main(String arg[]) {

    if (logger.isDebugEnabled()) {
        logger.debug("debug");
    }

    if (logger.isInfoEnabled()) {
        logger.info("info");
    }
}
}

在运行PMD违规时 - 检查代码我正在如果违规则没有包围日志块。请你告诉我如何解决这个违规问题。

此违规仅适用于信息级别。

提前致谢。

3 个答案:

答案 0 :(得分:2)

此规则无法正常运行。在以后的版本中,它被禁用了。 PMD(5.1.1)的最新版本有一个名为GuardLogStatementJavaUtil的规则,该规则执行相同的操作,但该工作正常。

更新:

我尝试过使用以下代码:

private static final Log log = LogFactoryImpl.getLog("apache.commons.logger");
private static final Logger logger = Logger.getLogger("java.util.logger");

public static void main(String[] args) {
    if (log.isInfoEnabled()) {
        log.info("jebediah");
    }
    if (logger.isLoggable(Level.INFO)) {
        logger.info("kerman");
    }
}

运行PMD后,我收到两条警告信息:

1)在log.info("jebediah");行,我收到以下错误消息: Java Logging - > GuardLogStatementJavaUtil

2)在logger.info("kerman");行,我收到以下错误消息: Jakarta Commons Logging - > GuardLogStatement

看起来无论我做什么,我都会收到警告。

答案 1 :(得分:0)

将信息日志更改为调试并开始通过。

答案 2 :(得分:0)

您可以添加

@SuppressWarnings("PMD.GuardLogStatementJavaUtil")
private void sample() {
  if (logger.isInfoEnabled()) {
    logger.info("sample log");
  }
}

有关禁用此警告的方法。

用法示例:

id