2009-02-06 3 views
5

Я настраиваю ведение журнала для приложения Java. Я нацелен на два журнала: один для всех сообщений и один для сообщений только определенного уровня.Отдельные журналы INFO и ERROR из java.util.logging

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

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

java.util.logging.FileHandler.level = INFO 

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

Любые предложения?

ответ

4

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 (новый LevelFilter (Level.INFO)) или любой другой. Если вы хотите, чтобы файл был настроен, вы могли бы использовать настройки свойств ведения журнала, которые вы создали сами, и использовать обычные методы Свойства.

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

+0

Спасибо за ответ. Я просто считаю непонятным, что вы не можете регистрировать сообщения различной степени тяжести в разных местах без написания кода. – user63196

+0

Да, это одна из причин, почему многие люди используют log4j вместо этого –

0

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

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

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

+0

Я использую приложение как есть - я не хочу писать код здесь: просто настройте ведение журнала из файла свойств. – user63196

+0

Тогда это невозможно. То, о чем вы просите, не является особенностью используемой вами системы ведения журнала. Боюсь, если это то, что вам нужно использовать, то вам не повезло. – paxdiablo

Смежные вопросы