Где/как log4j ищет log4j.properties файл?

Я испытываю log4j в простом тестовом приложении. Я создаю новый проект Java в затмении и добавляю log4j JAR (v1.2.16) к моему пути сборки. Я затем создаю простой класс, который печатает Привет Мир. Затем я использую log4j Logger класс для входа информационного сообщения. То, когда я запускаю приложение, я вижу, что журнал обменивается сообщениями, с помощью то, что я принимаю, является значением по умолчанию appender и расположением.Отлично. Из-за чего я испытываю затруднения, добавляет моя собственная конфигурация. Это - то, что я сделал:

Созданный log4j.properties файл с пользовательским appender и уровнем журнала и помещенный это в src папку (который после компиляции копируется в папку мусорного ведра). Запустите приложение - никакое изменение.

Я пытаюсь добавить PropertyConfigurator.configure("log4j.properties"). Запустите приложение - никакое изменение. Никакие ошибки, но никакое изменение.

Что я должен сделать, чтобы заставить log4j загружать мой конфигурационный файл?

25
задан Marplesoft 26 April 2010 в 20:56
поделиться

4 ответа

Аргх. Я обнаружил, что проблема в том, что eclipse импортировал неправильный класс Logger . Он импортировал java.util.logging.Logger, который, конечно, имеет собственную конфигурацию, отличную от log4j. Ну что ж, надеюсь, что кто-то другой сделает это и решит эту проблему, прочитав этот вопрос.

8
ответ дан 28 November 2019 в 18:27
поделиться

Вы можете включить внутреннюю отладку log4j, установив системное свойство log4j.debug . Среди прочего, это заставит log4j показать, как он настраивается.

Вы можете попробовать явно указать URL-адрес файла конфигурации с помощью системного свойства log4j.configuration .

См. Также: этот вопрос .

7
ответ дан 28 November 2019 в 18:27
поделиться

Для тех, у кого нет RTFM, просмотрите заголовок Процедура инициализации по умолчанию , где вы найдете следующее:

Точный алгоритм инициализации по умолчанию определяется следующим образом:

  1. Установка для системного свойства log4j.defaultInitOverride любого значения, кроме « false », приведет к тому, что log4j пропустит значение по умолчанию {{ 1}} процедура инициализации (эта процедура).
  2. Установите для переменной строки ресурса значение системного свойства log4j.configuration . Предпочтительный способ указать файл инициализации по умолчанию - использовать системное свойство log4j.configuration . Если системное свойство log4j.configuration не определено, установите для ресурса строковой переменной значение по умолчанию « log4j.properties ».
  3. Попытка преобразовать переменную ресурса в URL.
  4. Если переменная ресурса не может быть преобразована в URL-адрес, например, из-за исключения MalformedURLException, выполните поиск ресурса в пути к классам , вызвав org.apache.log4j.helpers.Loader .getResource (resource, Logger.class) , который возвращает URL. Обратите внимание, что строка « log4j.properties » представляет собой неверный URL. См. Loader.getResource (java.lang.Строка) для получения списка найденных местоположений.
  5. Если URL-адрес не может быть найден, прервите инициализацию по умолчанию. В противном случае настройте log4j из URL-адреса. PropertyConfigurator будет использоваться для анализа URL-адреса для настройки log4j, если URL-адрес не заканчивается расширением « .xml ». , и в этом случае будет использоваться DOMConfigurator . При желании вы можете указать собственный конфигуратор. Значение системного свойства log4j.configuratorClass принимается как полное имя класса вашего настраиваемого конфигуратора. Указанный вами пользовательский конфигуратор должен реализовывать интерфейс Конфигуратор .
37
ответ дан 28 November 2019 в 18:27
поделиться

log4j.properties должен быть в вашем пути к классам. «Папка src», которая копируется в «папку bin» (я предполагаю, что вы говорите здесь о настройке Eclipse), обычно принадлежит вашему пути к классам, поэтому ее следует найти (размещаете ли вы ее в верхней части «src "папка, верно?)

2
ответ дан 28 November 2019 в 18:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: