tuto - log4j.xml fileappender




Eclipse: Référencement de log4j.dtd dans log4j.xml (4)

Essayez d'ajouter log4j.dtd en tant qu'entrée de catalogue XML URI spécifique à l'utilisateur dans "Préférences -> XML -> Catalogue XML". Comme je sais, c'est l'endroit où eclipse gère les références aux fichiers de définition / validation (comme xsd). S'ils peuvent être trouvés ici, eclipse n'a pas besoin d'un accès internet pour y accéder sur son site (web) natif.

Je l'ai fait comme ça (pour le test) et éclipse ne se plaint pas:

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

Peut-être que $ {M2_REPO} fonctionne - je n'ai pas vérifié cela.

Utilisez ensuite l'URL native dans votre fichier log4j.xml

<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">

MODIFIER

Je voudrais aller avec la solution ci-dessus, mais pour revenir à votre question, je pense que les variables de chemin de classe «peuvent être utilisés dans un chemin de construction Java» . Pourquoi devraient-ils travailler dans une définition DOCTYPE? "Valider" (menu contextuel Eclipse) le fichier log4j.xml et vous recevrez un avertissement que le chemin ne peut pas être résolu.

J'espérais que classpath:org/apache/log4j/xml/log4j.dtd ferait l'affaire mais ce protocole n'est pas non plus supporté (voir erreur de validation). J'ai peur que cela ne fonctionne pas hors de la boîte.

Et, comme je l'ai compris, la notation SYSTEM "log4j.dtd" n'est pas un espace réservé. C'est une référence valide à un document qui devrait être trouvé à côté de la DDT (dans ce cas).

J'utilise log4j depuis un certain temps maintenant et j'utilise habituellement ceci en haut du fichier log4j.xml (probablement comme beaucoup d'autres et selon Google c'est la façon de le faire):

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

Évidemment, cela fonctionne, mais Eclipse ne fournit pas son aide contextuelle pour l'écriture du XML et tout. En outre, il affiche toujours un avertissement indiquant qu'il ne trouve pas log4j.dtd . Maintenant, je suis curieux de résoudre ce problème.

J'ai essayé quelques petites choses et celles-ci fonctionnent:

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

Comme vous pouvez le voir ci-dessus, nous utilisons Maven. Par conséquent, j'ai essayé cela, mais cela échoue:

<!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 sait généralement comment gérer les variables classpath, mais pourquoi cela ne fonctionne-t-il pas? Je sais que la référence ne fonctionnera pas pendant l'exécution, mais pas non plus un simple log4j.dtd (si je ne me trompe pas), cela ne devrait donc pas poser de problème.

Quelqu'un peut-il s'il vous plaît faire la lumière sur cela?


Habituellement, Eclipse recherche log4j.dtd dans classpath et il ne le trouve pas là et d'où l'erreur. Nous pouvons résoudre ce problème en fournissant l'URL pour le fichier log4j.dtd comme ci-dessous.

<!DOCTYPE log4j:configuration SYSTEM 
      "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">

J'ai essayé avec la réponse de FrVaBe mais n'a pas fonctionné pour moi et j'ai fait un petit changement dans la valeur de clé et cela fonctionne.

"Préférences -> XML -> Catalogue XML"

Localization: C:\Users\me\Desktop\log4j.dtd
Key Type: URI
Key: -//APACHE//DTD LOG4J 1.2//EN

Je sais que cette question a été répondue, mais je voudrais fournir mon alternative légèrement différente:

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

Il est similaire à la réponse de @ FrVaBe , mais sur le plan positif, il ne nécessite aucune autre configuration Eclipse (par exemple, si vous partagez votre projet avec d'autres ou si vous avez une grande équipe, c'est une préoccupation de moins).

L'inconvénient cependant, c'est que je crois que cela signifie que vous aurez besoin d'une connexion Internet (au moins à un moment donné au cours du développement, même si ce n'est qu'une seule fois).





log4j