Проблема с предупреждением log4j - apache commons

Я использую библиотеку apache commons и log4j. У меня есть файл конфигурации xml и файлы log4j.properties. Я хочу указать путь к своим свойствам log4j в моем файле конфигурации xml. Чтобы загрузить мои настройки, я делаю:

//Loading my xml file
this.config = new XMLConfiguration(this.xmlFileName);  

В этот момент выдаются следующие предупреждения:

log4j:WARN No appenders could be found for logger (org.apache.commons.configuration.ConfigurationUtils).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

Однако я еще не вызывал какой-либо объект log4j. Как только я прочитаю файл xml, я смогу успешно работать с моим экземпляром log4j. Есть ли способ удалить эти предупреждения?


person Matteo Codogno    schedule 03.04.2012    source источник


Ответы (4)


Log4J выводит эту ошибку, когда регистратор создан, но не определены никакие приложения. На практике эта ошибка возникает, когда регистратор создается до инициализации log4j.

Вы говорите, что не вызывали объект log4j. Но в сообщении об ошибке вы видите, что org.apache.commons.configuration.ConfigurationUtils создает объект логгера (см. строку 66).

Вы можете отключить его перед инициализацией, см. Как отключить предупреждения log4j?

Logger.getRootLogger().setLevel(Level.OFF);

Не должно быть необходимости включать его снова, поскольку инициализация обычно устанавливает уровень журнала корневого регистратора.

person ChrLipp    schedule 03.04.2012
comment
Хорошо, есть ли способ отключить LOG внутри «org.apache.commons.configuration.ConfigurationUtils» или настроить мои свойства log4j в соответствии с моей конфигурацией xml? - person Matteo Codogno; 03.04.2012

Проверьте, находится ли файл log4j.properties в пути к классам.

Эта ссылка может быть полезной: http://www.coderanch.com/t/63230/open-source/log-log-WARN-No-appenders

person Michael Fernando    schedule 03.04.2012
comment
Я не хочу вставлять свой log4j.properties в путь к классам, потому что он находится вне банки и в другом каталоге. Я хочу загрузить его во время выполнения, используя путь, указанный в файле конфигурации моего приложения. - person Matteo Codogno; 03.04.2012

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

Пример установки уровня аппендера и логгера для корневого логгера:

#Set root logger 's level and its appender to an appender called CONSOLE which is defined below.
log4j.rootLogger=DEBUG, CONSOLE

#Set the behavior of the CONSOLE appender 
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
person Ken Chan    schedule 03.04.2012

Я решаю свою проблему с помощью этого обходного пути:

//Disable log level
Logger.getRootLogger().setLevel(Level.OFF);

Теперь я могу читать свой файл конфигурации xml без ПРЕДУПРЕЖДЕНИЙ.
После установки уровня журнала:

Logger.getRootLogger().setLevel(Level.INFO);
person Matteo Codogno    schedule 04.04.2012
comment
Разве это не то решение, которое я предложил в своем комментарии под своим постом? - person ChrLipp; 26.04.2012