Подтвердить что ты не робот

Log4j.properties vs log4j.xml

Мне было предложено перейти от конфигурации стиля свойств к стилю xml. Сам процесс прост и не вызывает у меня никаких проблем, мне было просто любопытно, почему меня спросили об этом, и я искал причину. Я нашел этот хороший пост Зачем выбирать XML по файлам свойств для конфигурации Log4J? (более 3 лет, но по-прежнему наиболее информативный, который я мог найти), который указывал на этот еще более старый учебник. Они заявляют

Свойства могут быть определены файлом свойств или файлом XML.

Log4j ищет файл с именем log4j.xml, а затем для файла с именем log4j.properties. Оба должны быть помещены в папку src.

Я проверил это и, вопреки утверждению, обнаружил, что Log4j сначала ищет файл свойств и во второй раз для xml. Фактически, если я сохраняю оба в одной папке, вывод форматируется в соответствии с файлом свойств. Итак, я неправильно понял выражение? Это просто неправильно? Заявление сделано для log4j 1.2.14, пока я нахожусь на log4j 1.2.17, возможно ли, что команда log4j изменила приоритет? Я не мог найти какую-либо связанную с этим документацию, но это будет странная инверсия тенденции, так как xml выглядел как предпочтительный способ настройки log4j

4b9b3361

Ответ 1

Посмотрите на JavaDoc. Документация PropertyConfiguratorClass (log4j.properties) указывает, что

PropertyConfigurator не обрабатывает расширенную конфигурацию функции, поддерживаемые DOMConfigurator, такие как поддержка пользовательских ErrorHandlers, вложенные приложения, такие как AsyncAppender и т.д.

Таким образом, DOMConfigurator (log4j.xml) предлагает расширенные параметры.

Кроме того, вы можете иметь (хотя бы простую) проверку действительности файлов log4j.xml с помощью предоставленного log4j.dtd.

Если youd не использует расширенные функции, нет необходимости менять свойства на xml файлы.

На самом деле вам стоит подумать о том, чтобы перейти от log4j к log4j 2 beta или даже slf4j. Разработка log4j остановилась, и основатель этого (@Ceki) изобрел slf4j.

Ответ 2

В соответствии с ответом FrVaBe класс PropertyConfigurator не обрабатывает расширенные функции, которые может поддерживать XML.

Стоит отметить, что одним из наиболее полезных расширенных параметров (доступно только log4j.xml) является возможность фильтрации на определенном уровне журнала или диапазоне уровней журнала с использованием LevelMatchFilter и DenyAllFilter

Хороший пример можно увидеть здесь.