Где/как log4j ищет файл log4j.properties?
Я пытаюсь выполнить log4j в простом тестовом приложении. Я создаю новый проект Java в eclipse и добавляю log4j JAR (v1.2.16) в мой путь сборки. Затем я создаю простой класс, который печатает Hello World. Затем я использую класс log4j Logger
для регистрации информационного сообщения. Когда я запускаю приложение, я вижу сообщение журнала, используя то, что я предполагаю, как приложение и макет по умолчанию. Отлично. У меня возникают проблемы с добавлением моей собственной конфигурации. Это то, что я сделал:
Создал файл log4j.properties с пользовательским уровнем и уровнем регистрации и поместил его в папку src (которая после компиляции будет скопирована в папку bin). Запустите приложение - никаких изменений.
Я пытаюсь добавить PropertyConfigurator.configure("log4j.properties")
. Запустите приложение - никаких изменений. Нет ошибок, но никаких изменений.
Что мне нужно сделать, чтобы log4j загрузил мой файл конфигурации?
Ответы
Ответ 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 и, следовательно, делают против него ошибочные ошибки.