Log4J:isDebugEnabled() 方法有问题

jul*_*ien 4 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());
}
}
Run Code Online (Sandbox Code Playgroud)

我得到:

Logger org.test.Test
level: null
level: DEBUG
debug? false
Run Code Online (Sandbox Code Playgroud)

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

编辑:我尝试过其他版本的 log4j 和Level演员表,但它没有改变任何东西。

dre*_*kka 5

我建议你停止这样做static Logger ....。有一篇关于优缺点非常好的文章值得一读,特别是如果您在服务器上。

如果您可以考虑替代方案,我还会提出的另一个建议是查看Slf4jLogBack。例如,Slf4j 不需要围绕调试日志的保护“if”语句,这反过来意味着更干净的代码。