Log4J:isDebugEnabled()方法的问题

时间:2010-11-09 13:16:39

标签: java debugging logging log4j

我正在努力使用Log4J和isDebugEnabled()方法。

执行时:

package org.test;

import org.apache.log4j.Level;
import org.apache.log4j.Logger;

public class Test {
public static Logger logger = Logger.getLogger(Test.class.getName());

public static void main(String[] args) { (new Test()).test(); }

public void test() {
    System.out.println("Logger " + logger.getName());
    System.out.println("level: " + logger.getLevel());
    logger.setLevel(Level.DEBUG);
    System.out.println("level: " + logger.getLevel());
    System.out.println("debug? " + logger.isDebugEnabled());
}
}

我明白了:

Logger org.test.Test
level: null
level: DEBUG
debug? false

记录器级别显然为DEBUG,但logger.isDebugEnabled()返回false。 你知道如何解决这个问题吗?

编辑: 我尝试过使用其他版本的log4j并使用Level强制转换,但它没有改变任何内容。

4 个答案:

答案 0 :(得分:4)

我建议你停止static Logger ....。有一个very good article about the pros and cons非常值得一读,特别是如果你在服务器上。

如果您可以考虑替代方案,我建议的另一个建议也是查看Slf4jLogBack。例如,Slf4j不需要关于调试日志记录的保护“if”语句,这反过来意味着更清晰的代码。

答案 1 :(得分:1)

我尝试使用此代码重现它,但它适用于我:

package com.example;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;

public class LogTest {

  public static Logger logger = Logger.getLogger(LogTest.class.getName());

  public static void main(String[] args) {
    System.out.println(logger.getLevel());
    logger.setLevel(Level.DEBUG);
    System.out.println(logger.getLevel());
    System.out.println(logger.isDebugEnabled());
  }
}

输出:

null
DEBUG
true

我已经使用log4j-1.2.15进行此测试。


所以也许你的log4j版本存在问题 - 暂时切换到1.2.14或1.2.15,如果问题仍然存在,请检查。

答案 2 :(得分:1)

原因似乎与通过maven引入的依赖性发生冲突。 我已经测试过删除其中的一些依赖项,它终于奏效了。 我不明白为什么,但......它有效!

答案 3 :(得分:0)

您应该执行以下操作(来自JavaDoc):

logger.setLevel((Level) Level.DEBUG);

-

我在示例中看到的唯一区别是:

public static Logger logger = Logger.getLogger(Test.class.getName());

我有:

public static Logger logger = Logger.getLogger(Test.class);

这可能不是99%,但正如我所说,这是唯一的区别。