2011-02-11 9 views
9

? Obtengo una excepción cuando intento ejecutar mi aplicación (en eclipse) quejándose de log4j.dtd. ¿Tengo que tener un archivo dtd si uso la configuración xml para log4j?¿Por qué Log4j está tratando de encontrar log4j.dtd

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) 
+1

Podría incluir más de su seguimiento de la pila, porque log4j normalmente utiliza un EntityResolver que permite cargar el log4j dtd desde classpath (y, por lo tanto, desde el archivo jar log4j) –

Respuesta

2

Ok, recibí la respuesta a mi problema, resulta que log4j no necesita que el archivo dtd esté ubicado en su proyecto o máquina.

El error fue causado por eclipse al intentar ejecutar el archivo log4j.xml cuando inicié una ejecución. Anteriormente eclipse utilizado para ejecutar la última configuración de ejecución, ahora intenta ejecutar lo que esté abierto y enfocado en el editor. Y sucedió que mi archivo de configuración log4j.xml estaba abierto, y cualquier eclipse que se use para ejecutar un archivo xml estaba tratando de llegar al dtd según el archivo de configuración.

De todos modos, muchas gracias por su ayuda.

4

Si utiliza un archivo XML como archivo de configuración de log4j, busque en la etiqueta DOCTYPE y encontrará algo como esto:

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

Por lo que necesita ese archivo DTD, porque es la definición de la estructura de tu XML

De todos modos puede usar un archivo de propiedades como archivo de configuración, en lugar de un XML.

EDITAR: Me acaba de encontrar una pregunta correlacionada que podría ayudarle a: Eclipse: Referencing log4j.dtd in log4j.xml

+0

puedo g et away sin definir un dtd? (al utilizar la configuración xml) – Charbel

+1

Supongo que no puede, pero puede intentar eliminar la etiqueta 'DOCTYPE' o solo' SYSTEM "log4j.dtd" 'parte – bluish

+0

en la wiki log4j http://wiki.apache.org/ logging-log4j/Log4jXmlFormat, entonces no mencionas nada sobre log4j.dtd, no puedo encontrar ningún log4j.dtd en otros proyectos. Eliminar también cualquier parte de la etiqueta Charbel

20

Si utiliza log4j basado en XML, entonces sí, se necesita el archivo DTD. Copie este archivo DTD en su área de trabajo: http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd

Asegúrese de que se encuentra en el mismo directorio que su archivo log4j XML.

+0

¿Por qué esto no fue elegido como la respuesta correcta? –

+0

Gracias limc por ayudarme a encontrar el log4j.dtd. No está directamente relacionado con la pregunta, pero he encontrado que tu respuesta fue muy útil para mí. – jbbarquero

0

he tenido este problema con una aplicación frasco y acabó poniendo log4j.dtd en la jerarquía de directorios y los mensajes de error advertir/desaparecí:

org/apache/log4j/xml/log4j.dtd

Por cierto, esa es la ubicación en el archivo log4j.jar

2

Para las personas que entran en eso, a partir de ahora, log4j.dtd se incluye en log4j.jar (en la versión 1.2.14 al menos).

Como log4j.dtd que se busca en la ruta de clases (ver this other question) no lo necesita más.

3

Compruebe su log4j.xml debe estar buscando log4j.dtd

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

su lugar se puede usar:

<!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">

source

Cuestiones relacionadas