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

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

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

  • Установка системного свойства log4j.defaultInitOverride на любое другое значение, чем "false", приведет к тому, что log4j пропустит значение по умолчанию процедура инициализации (эта процедура).
  • Задайте переменную строки ресурса значению системного свойства log4j.configuration. Предпочтительный способ указать файл инициализации по умолчанию находится через log4j.configurationсистемное свойство. В случае, если системное свойство log4j.configuration не определено, затем установите для параметра string variable resource значение по умолчанию значение "log4j.properties".
  • Попытка конвертировать переменную ресурса в URL-адрес.
  • Если переменная ресурса не может быть преобразована в URL-адрес, например, из-за ошибки MalformedURLException, выполните поиск ресурса из classpath путем вызова org.apache.log4j.helpers.Loader.getResource(ресурс, Logger.class) который возвращает URL-адрес. Обратите внимание, что строка "log4j.properties" представляет собой неверный URL. Видеть Loader.getResource(java.lang.String)для списка найденных местоположений.
  • Если URL-адрес не найден, прекратите инициализацию по умолчанию. В противном случае настройте log4j из URL-адреса. PropertyConfiguratorбудет использоваться для анализа URL-адреса для настройки log4j, если URL-адрес не будет завершен с расширением ".xml", и в этом случае DOMConfiguratorбудет использован. Вы можете необязательно указать настраиваемый конфигуратор. значение системного свойства log4j.configuratorClass принимается за полное имя класса вашего настраиваемого конфигуратора. Обычай заданный конфигуратор должен реализовывать интерфейс Configurator.

Ответ 3

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

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

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

Ответ 4

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

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

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

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

Ответ 5

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

Ответ 6

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

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