simple - log4j2.xml example
Eclipse: haciendo referencia a log4j.dtd en log4j.xml (6)
Agregué la carpeta DTD en webcontent y luego copié el archivo log4j dtd en eso. entonces intenté como abajo. Esta funcionando
<!DOCTYPE log4j:configuration SYSTEM "<Path>/DTD/log4j.dtd">
La ruta significa aquí la ruta del proyecto como /projectname
He estado usando log4j desde hace bastante tiempo y normalmente lo uso en la parte superior de log4j.xml (probablemente igual que muchos otros y, según Google, esta es la manera 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 cómo solucionar esto.
Intenté algunas cosas y estos 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 manejar las variables classpath, pero ¿por qué no funciona? Sé que la referencia no funcionará durante el tiempo de ejecución, pero tampoco lo hace un simple log4j.dtd
(si no estoy equivocado), por lo que no debería ser un problema.
¿Alguien puede por favor arrojar luz sobre esto?
Intente agregar log4j.dtd como una entrada de catálogo XML de URI específico del usuario en "Preferencias -> XML -> Catálogo XML". Como sé, este es el lugar donde eclipse gestiona las referencias a 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:
Entry element: URI
Location: C:/Users/me/Desktop/log4j.dtd
URI: file:///C:/Users/me/Desktop/log4j.dtd
Key type: URI
Key: http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd
Tal vez también funcione $ {M2_REPO} - No verifiqué esto.
Use la URL nativa en su log4j.xml luego
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
EDITAR
Me gustaría ir con la solución anterior, pero para volver a su pregunta, creo que las variables de la ruta de clase ''se pueden usar en una ruta de compilación de Java'' . ¿Por qué deberían funcionar dentro de una definición DOCTYPE? "Validar" (eclipse context menu) el archivo log4j.xml y recibirá una advertencia de que la ruta no se puede resolver.
Esperaba que classpath:org/apache/log4j/xml/log4j.dtd
hiciera el truco, pero ese protocolo tampoco es compatible (ver error de validación). Me temo que no funcionará de la caja.
Y, como entendí, la notación SYSTEM "log4j.dtd"
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).
Lo intenté con la respuesta de FrVaBe, pero no funcionó, e hice un pequeño cambio en el valor de la clave y funcionó.
"Preferencias -> XML -> Catálogo XML"
Localization: C:/Users/me/Desktop/log4j.dtd
Key Type: URI
Key: -//APACHE//DTD LOG4J 1.2//EN
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 URL para el archivo log4j.dtd
como a continuación.
<!DOCTYPE log4j:configuration SYSTEM
"http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
Sé que esta pregunta ha sido respondida, pero me gustaría ofrecer mi alternativa ligeramente diferente:
<!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">
Es similar a la respuesta de @ FrVaBe , pero en el lado positivo, no requiere más configuración de Eclipse (es decir, si comparte su proyecto con otros o tiene un equipo grande, es una cosa menos de la que preocuparse).
Sin embargo, la desventaja es que creo que significa que necesitarás una conexión a Internet (al menos en algún momento durante el desarrollo, incluso si solo es una vez).
usa un buen enfoque con el ID PÚBLICO. Sin embargo, como él señala, requiere una conexión de red.
Prefiero una combinación:
Entry element: Public
Location: org/apache/log4j/xml/log4j.dtd in jar file C:/Development/lib/external/apache-log4j-1.2.17/log4j-1.2.17.jar
URI: jar:file:/C:/Development/lib/external/apache-log4j-1.2.17/log4j-1.2.17.jar!/org/apache/log4j/xml/log4j.dtd
Key type: Public ID
Key: -//APACHE//DTD LOG4J 1.2//EN
Esto hace referencia a un JAR local y admite una declaración DOCTYPE sin la URL completa.
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">