почему Log4j пытается найти log4j.dtd

Я получаю исключение, когда пытаюсь запустить приложение (в eclipse) с жалобой на log4j.dtd. Должен ли я иметь файл dtd, если я использую конфигурацию xml для log4j?

Caused by: java.io.FileNotFoundException: 

    C:\data\workspace\LDICommon_Trunk\resources\log4j.dtd (The system cannot find the file specified)
        at java.io.FileInputStream.open(Native Method)

person Charbel    schedule 11.02.2011    source источник
comment
Не могли бы вы включить больше трассировки стека, потому что log4j обычно использует EntityResolver, который позволяет загружать log4j dtd из пути к классам (и, следовательно, из файла jar log4j)   -  person JB Nizet    schedule 11.02.2011


Ответы (6)


Если вы используете log4j на основе XML, то да, вам понадобится файл DTD. Скопируйте этот файл DTD в свою рабочую область: http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd

Убедитесь, что он находится в том же каталоге, что и ваш XML-файл log4j.

person limc    schedule 11.02.2011
comment
Спасибо, limc, за помощь в поиске файла log4j.dtd. Не имеет прямого отношения к вопросу, но я нашел ваш ответ очень полезным для меня. - person jbbarquero; 19.02.2013
comment
Кажется, эта ссылка сейчас не работает. У вас есть последний рабочий URL? - person mannedear; 20.08.2018

Проверьте свой log4j.xml, он должен искать log4j.dtd.

<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">

Вместо этого вы можете использовать:

<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">

источник

person Volodymyr Fedorchuk    schedule 10.09.2016

Если вы используете XML-файл в качестве файла конфигурации log4j, посмотрите в теге DOCTYPE, и вы найдете что-то вроде этого:

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

Итак, вам нужен этот файл DTD, потому что это определение структуры вашего XML.

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

ИЗМЕНИТЬ: я только что нашел соответствующий вопрос, который может вам помочь: Eclipse: ссылка на log4j.dtd в log4j.xml

person bluish    schedule 11.02.2011
comment
я могу обойтись без определения dtd? (при использовании конфигурации xml) - person Charbel; 11.02.2011
comment
Я думаю, вы не можете, но вы можете попытаться удалить тег DOCTYPE или только SYSTEM "log4j.dtd" часть - person bluish; 11.02.2011
comment
в вики log4j wiki.apache.org/logging-log4j/Log4jXmlFormat, затем не используйте Я ничего не упомянул о log4j.dtd, я не могу найти log4j.dtd в других проектах. Также удаление любой части тега ‹! DOCTYPE .. вызывает ошибки. - person Charbel; 11.02.2011

Для людей, приходящих к этому, на данный момент log4j.dtd включен в log4j.jar (по крайней мере, в версии 1.2.14).

Поскольку log4j.dtd ищется в пути к классам (см. это другой вопрос) он вам больше не нужен.

person Matthieu    schedule 24.04.2015

Хорошо, я получил ответ на свою проблему, оказалось, что log4j не требуется, чтобы файл dtd располагался в вашем проекте или на вашем компьютере.

Ошибка была вызвана тем, что eclipse пытался запустить файл log4j.xml, когда я запускал запуск. Раньше eclipse использовался для запуска последней конфигурации запуска, теперь он пытается запустить все, что открыто и находится в фокусе в редакторе. И так случилось, что мой файл конфигурации log4j.xml был открыт, и все, что eclipse использует для запуска файла xml, пытается добраться до dtd в соответствии с файлом конфигурации.

В любом случае, большое спасибо за вашу помощь.

person Charbel    schedule 14.02.2011
comment
Что случилось, если ваш файл конфигурации log4j.xml был открыт? Я не могу понять логику вашего ответа. Не могли бы вы немного уточнить и прояснить это? - person mannedear; 09.08.2018

У меня была эта проблема с приложением jar, и в итоге я поместил log4j.dtd в иерархию каталогов, и сообщения с предупреждениями / ошибками исчезли:

org / apache / log4j / xml / log4j.dtd

кстати, это расположение в файле log4j.jar

person Bob    schedule 06.07.2012