Log4J: проблема с методом isDebugEnabled () - PullRequest
4 голосов
/ 09 ноября 2010

Я борюсь с 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. У вас есть идея, как это исправить?

EDIT: Я пробовал с другими версиями log4j и с Level cast, и это ничего не изменило.

Ответы [ 4 ]

4 голосов
/ 10 ноября 2010

Я бы посоветовал вам прекратить делать static Logger .....есть очень хорошая статья о плюсах и минусах , которую стоит прочитать, особенно если вы находитесь на сервере. Slf4j или LogBack , если вы можете рассмотреть альтернативы.Например, Slf4j не требует защитных операторов if для ведения журнала отладки, что, в свою очередь, означает более чистый код.

1 голос
/ 09 ноября 2010

Я пытался воспроизвести его с помощью этого кода, но он работает для меня:

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 и просто проверьте, сохраняется ли проблема.

1 голос
/ 09 ноября 2010

Причина, по-видимому, в конфликте с зависимостью, введенной через maven.Я проверил, чтобы удалить некоторые из этих зависимостей, и это, наконец, сработало.Я не понимаю почему, но ... это работает!

0 голосов
/ 09 ноября 2010

Вы должны сделать следующее (из JavaDoc):

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

-

Единственное другое отличие, которое я вижу между нашими примерами, заключается в том, что у вас есть:

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

где у меня есть:

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

Это 99%, вероятно, не так, но, как я уже сказал, это единственное отличие.

...