Где / как log4j ищет файл log4j.properties? - PullRequest
25 голосов
/ 27 апреля 2010

Я пробую log4j в простом тестовом приложении. Я создаю новый проект Java в eclipse и добавляю JAR log4j (v1.2.16) к моему пути сборки. Затем я создаю простой класс, который печатает Hello World. Затем я использую класс log4j Logger для записи информационного сообщения. Когда я запускаю приложение, я вижу сообщение журнала, используя то, что я полагаю, является приложением и макетом по умолчанию. Отлично. У меня проблемы с добавлением моей собственной конфигурации. Вот что я сделал:

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

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

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

Ответы [ 6 ]

37 голосов
/ 27 апреля 2010

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

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

  1. Установка системного свойства log4j.defaultInitOverride на любое другое значение, кроме "false", заставит log4j пропустить значение по умолчанию процедура инициализации (эта процедура).
  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.String) для списка найденных мест.
  5. Если URL не найден, прервать инициализацию по умолчанию. В противном случае настройте log4j из URL. PropertyConfigurator будет использоваться для анализа URL для настройки log4j, если URL не заканчивается с расширением ".xml", в этом случае DOMConfigurator будет использоваться. Вы можете дополнительно указать пользовательский конфигуратор. Значение системного свойства log4j.configuratorClass принимается за полное имя класса вашего пользовательского конфигуратора. Обычай указанный конфигуратор должен реализовывать интерфейс Configurator.
8 голосов
/ 27 апреля 2010

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

7 голосов
/ 27 апреля 2010

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

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

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

5 голосов
/ 05 сентября 2013

Проблема может быть в classpath, если был определен classpath.

Причина, по которой он не загружался (в моем случае): в одном из моих jar-файлов был конфликт log4j.properties, и он был перегружен в моем classpath.

Короче говоря, если ваш log4j.properties файл не загружается, возможно, есть другой файл, который переопределяет его.

Просто подумал, что я тоже это добавлю, на случай, если кто-нибудь еще столкнется с этим. Я только что провел последние 5 часов, пытаясь понять, почему мой стандартный log4j.properties не загружается.

2 голосов
/ 27 апреля 2010

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

1 голос
/ 21 октября 2010

Я знаю, что это пара месяцев, но я чувствую необходимость указать, что папка scr не "копируется" в папку bin и не является частью вашего пути к классам во время выполнения .... (build путь не является classpath времени выполнения!). Eclipse компилирует исходные файлы из папки src в папку bin (или что угодно). Это папка bin, которая является частью вашего пути к классам во время выполнения.

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

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