我正在努力使用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
强制转换,但它没有改变任何内容。
答案 0 :(得分:4)
我建议你停止static Logger ....
。有一个very good article about the pros and cons非常值得一读,特别是如果你在服务器上。
如果您可以考虑替代方案,我建议的另一个建议也是查看Slf4j或LogBack。例如,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%,但正如我所说,这是唯一的区别。