2009-11-14 3 views
0

У меня есть основное средство, позволяющее пользователям удаленно применять изменения к файлам ведения журнала в моем приложении. Некоторые журналы настраиваются с использованием файлов свойств java.util.logging, а некоторые настраиваются с использованием файлов свойств log4j/log4cplus. Я хотел бы сделать некоторые основные проверки свойств, которые пользователи пытаются применить. А именно, я хочу, чтобы обеспечить следующее:Как проверить файлы свойств журнала Java?

  • Каждый logging.properties файл всегда должен содержать, по крайней мере, уровень корневой регистратор/протоколирования
  • Регистратор/уровень должен быть установлен на действительное значение. То есть, они не должны устанавливать значение .level = GIBBERISH или что-то в этом роде.
  • Возможно, я разрешу им устанавливать MaxFileSize и MaxBackupIndex (log4j), а также свойства .limit и .count (java.util.logging).

Каков наилучший способ для этого? Я могу, очевидно, просто перебрать ключи и значения в объекте Properties и искать их значения в жестко закодированной карте или какой-либо другой структуре данных, которая сообщает, какие действительные свойства есть, но я пытаюсь найти решение, которое является немного более элегантным, чем это.

+0

Можете ли вы настаивать на формате конфигурации XML Log4j? – Jherico

+0

Наверное, нет. Возможно, в будущем выпуске, поэтому, если у вас есть предложения по этим строкам, я бы их рассмотрел. – Jeff

ответ

1

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

Вместо того, чтобы тестировать отдельные свойства, почему бы не создать дополнительный (временный, только для области проверки) объект регистрации на основе входного файла и определить, вызывает ли он ошибку?

+0

Мне нравится эта идея, но, возможно, я недостаточно знаком с API-интерфейсами для ее реализации. Как создать временный регистратор с помощью набора загруженных свойств? Я не вижу никаких очевидных методов для этого в документах API. – Jeff

+0

@Steve B - +1 о ваших рассуждениях; к сожалению, проблема в том, что ни java.util.logging.LogManager, ни PropertyConfigurator Log4j не вызывают фактического исключения. Они оба игнорируют все, что они не понимают, в лучшем случае ошибки печати в System.err в некоторых случаях. – ChssPly76

0

«Элегантным» решением было бы написать механизм, основанный на правилах, для проверки наборов пар имя-значение. Но ИМО, которая полностью перевернута для этого случая использования, если только проверки не намного сложнее, чем я себе представляю.

Я бы сказал, что простое (неэлегантное) решение является лучшим в этом случае.

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