statuslogger simple found example error application xml eclipse configuration log4j

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