Отдельные журналы INFO и ERROR от java.util.logging - PullRequest
6 голосов
/ 06 февраля 2009

Я настраиваю ведение журнала для приложения Java. Я стремлюсь к двум журналам: один для всех сообщений и один только для сообщений выше определенного уровня.

Приложение использует классы java.util.logging.*: я использую его как есть, поэтому я ограничен конфигурацией через файл logging.properties.

Я не вижу способа настроить два FileHandlers по-разному: документы и примеры, которые я видел, устанавливают такие свойства как:

java.util.logging.FileHandler.level = INFO

Хотя я хочу, чтобы два разных обработчика регистрировали на разных уровнях разные файлы.

Есть предложения?

Ответы [ 2 ]

4 голосов
/ 06 февраля 2009

http://java.sun.com/j2se/1.4.2/docs/guide/util/logging/overview.html полезно. Вы можете установить только один уровень для любого отдельного регистратора (как вы можете сказать из метода setLevel () регистратора). Однако вы можете выбрать самый низкий из двух общих уровней, а затем выполнить программную фильтрацию.

К сожалению, вы не можете сделать это только с помощью файла конфигурации. Чтобы переключиться только с помощью файла конфигурации, вам нужно переключиться на что-то вроде log4j , что, как вы сказали, не вариант.

Поэтому я бы предложил изменить код входа в систему с помощью фильтров следующим образом:

class LevelFilter implements Filter {
    private Level Level;
    public LevelFilter(Level level) {
        this.level = level;
    }
    public boolean isLoggable(LogRecord record) {
        return level.intValue() < record.getLevel().intValue();
    }
}

А затем на втором обработчике выполните setFilter (new LevelFilter (Level.INFO)) или что-то еще. Если вы хотите, чтобы файл настраивался, вы можете использовать настройки свойств ведения журнала, которые вы создали самостоятельно, и использовать обычные методы свойств.

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

0 голосов
/ 06 февраля 2009

Я думаю, вы должны иметь возможность просто создать подкласс обработчика, а затем переопределить методы, чтобы разрешить выводу нескольких файлов в зависимости от уровня сообщения. Это можно сделать, переопределив метод publish ().

В качестве альтернативы, если у вас есть для использования предоставляемого системой FileHandler, вы можете выполнить для него функцию setFilter (), чтобы добавить свой собственный фильтр в микс и в этом коде фильтра отправить ВСЕ сообщения ваш другой файл и верните true, если уровень LogRecord, если INFO или выше, заставляет FileHandler.publish () записать его в реальный файл.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...