He estado usando log4j durante bastante tiempo y generalmente lo uso en la parte superior de log4j.xml (probablemente como muchos otros y, según Google, esta es la forma de hacerlo):
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
Obviamente, esto está funcionando, sin embargo, Eclipse no proporciona su ayuda contextual para escribir el XML y todo. Además, siempre muestra una advertencia de que no encuentra el log4j.dtd
. Ahora tengo curiosidad por saber cómo solucionar este problema.
Probé algunas cosas y estas funcionan:
<!DOCTYPE log4j:configuration SYSTEM "jar:file:/path/.m2/repository/log4j/log4j/1.2.14/log4j-1.2.14.jar!/org/apache/log4j/xml/log4j.dtd">
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
Como puede ver desde arriba, estamos usando Maven. Por lo tanto, probé esto, pero falla:
<!DOCTYPE log4j:configuration SYSTEM "jar:file:${M2_REPO}/log4j/log4j/1.2.14/log4j-1.2.14.jar!/org/apache/log4j/xml/log4j.dtd">
Eclipse generalmente sabe cómo lidiar con las variables de classpath, pero ¿por qué no funciona? Sé que la referencia no funcionará durante el tiempo de ejecución, pero tampoco una simple log4j.dtd
(si no me equivoco), por lo que no debería ser un problema.
¿Alguien puede arrojar algo de luz sobre esto?
fuente
Intente agregar log4j.dtd como una entrada de catálogo XML URI específico del usuario en "Preferencias -> XML -> Catálogo XML". Como sé, este es el lugar donde eclipse administra las referencias a los archivos de definición / validación (como xsd). Si se pueden encontrar aquí, eclipse no necesita acceso a Internet para acceder a ellos en su ubicación nativa (web).
Lo hice así (para prueba) y eclipse no se queja:
Quizás también funcione $ {M2_REPO}; no lo marqué.
Use la URL nativa en su log4j.xml después
EDITAR
Yo iría con la solución anterior, pero para volver a su pregunta, creo que las variables de ruta de clase 'se pueden usar en una ruta de compilación de Java' . ¿Por qué deberían trabajar dentro de una definición de DOCTYPE? "Valide" (menú contextual de eclipse) el archivo log4j.xml y obtendrá una advertencia de que la ruta no se puede resolver.
Esperaba
classpath:org/apache/log4j/xml/log4j.dtd
que hiciera el truco, pero ese protocolo tampoco es compatible (consulte el error de validación). Me temo que no funcionará de inmediato.Y, según entendí, la
SYSTEM "log4j.dtd"
notación no es un marcador de posición. Es una referencia válida a un documento que se espera que se encuentre junto al dtd (en este caso).fuente
log4j.jar
conjunto. Supongo que "log4j.dtd" es una especie de marcador de posición, ya que es un nombre tan general. - Sí, copiar el log4j.dtd junto al XML sería una solución, pero ¿es realmente una forma común de hacerlo?SYSTEM "log4j.dtd"
la manera de hacerlo es una referencia dada por favor para su declaración .Agregué la carpeta DTD en el contenido web y luego copié el archivo log4j dtd en eso. luego lo intenté como abajo. Esta funcionando
Ruta significa aquí la ruta del proyecto como
/projectname
fuente
Intenté con la respuesta de FrVaBe pero no funcionó para mí e hice un pequeño cambio en el valor de la clave y funciona.
"Preferencias -> XML -> Catálogo XML"
fuente
@Jack Leow usa un buen enfoque con el ID PÚBLICO. Sin embargo, como señala, requiere una conexión de red.
Prefiero una combinación:
Esto hace referencia a un JAR local y admite una declaración DOCTYPE sin la URL completa.
fuente
Por lo general, Eclipse busca
log4j.dtd
en classpath y no lo encuentra allí y, por lo tanto, el error. Podemos resolver este problema proporcionando la URL dellog4j.dtd
archivo como se muestra a continuación.fuente