Путаница уровней логирования Java - PullRequest
3 голосов
/ 11 февраля 2011

Я установил уровень ведения журнала на CONFIG, но не вижу сообщений, написанных на уровне CONFIG.Чего мне не хватает?

Конфигурация:

Logger logger = java.util.logging.Logger.getLogger("xxx");
logger.setLevel(java.util.logging.Level.CONFIG);

Тесты:

logger.log(java.util.logging.Level.SEVERE, "severe");
logger.log(java.util.logging.Level.WARNING, "warning");
logger.log(java.util.logging.Level.INFO, "info");
logger.log(java.util.logging.Level.CONFIG, "config");
logger.log(java.util.logging.Level.FINE, "fine");
logger.log(java.util.logging.Level.FINER, "finer");
logger.log(java.util.logging.Level.FINEST, "finest");

Выход:

SEVERE: severe
WARNING: warning
INFO: info

Ответы [ 2 ]

7 голосов
/ 11 февраля 2011

Я обычно использую logback , чтобы реализовать ведение журнала, что кажется немного лучше задокументировано. Поэтому я бы рекомендовал перейти на это.

Но чтобы ответить на ваш вопрос, я думаю, что происходит то, что ваш Logger настроен правильно, а Handler, на который он отправляет свои сообщения, - нет. Конфигурация по умолчанию, вероятно, присоединяет обработчик с логированием уровня INFO к корневому логгеру.

edit: я написал небольшую тестовую программу для проверки, вам действительно нужно установить уровень на обработчике, прикрепленном к корневому логгеру. Вы можете сделать это так:

for (Handler handler : Logger.getLogger("").getHandlers()) {
    handler.setLevel(Level.CONFIG);
}
logger.config("config");

Дает в качестве вывода:

11 февраля 2011 г. 16:32:14 Испытание основного
CONFIG: config

Устанавливает уровень для всех обработчиков, прикрепленных к этому. Очевидно, что лучшим выбором будет написание вашего собственного файла опций и явная настройка ваших регистраторов. Быстрый гугл обнаружил эту статью на эту тему.

Вы также можете попробовать настроить файл свойств в вашем classpath, который гласит:

java.util.logging.ConsoleHandler.level=CONFIG
1 голос
/ 11 февраля 2011

Это ожидаемое поведение.

Когда вы определите уровень журналов, вы увидите все журналы этого уровня, но также и журналы, связанные с более высоким уровнем.

Порядок следующий:

  • SEVERE (максимальное значение)
  • ПРЕДУПРЕЖДЕНИЕ
  • INFO
  • CONFIG
  • FINE
  • FINER
  • FINEST (минимальное значение)

Так что в вашем случае, если вы определите уровень для INFO, вы увидите только журналы SEVERE, WARNING и INFO, а не CONFIG сообщения.

<Ч />

Редактировать , чтобы ответить на ваш исправленный вопрос:

Возможно, для вашего Logger класса (log4j, slf4j и т. Д.) Используется сторонняя библиотека, и эта библиотека определяет собственный уровень журнала. Например, для log4j есть только следующие уровни:

  • DEBUG
  • INFO
  • WARN
  • ERROR
  • FATAL

В таком случае уровень CONFIG считается уровнем INFO, который объясняет ваше текущее поведение.

...