120 votes

Eclipse: Référencement log4j.dtd dans log4j.xml

J'ai été en utilisant log4j pour un bon moment maintenant et j'ai l'habitude d'utiliser le présent en haut de la 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, cependant Eclipse ne pas fournir son aide contextuelle pour l'écriture du XML et de tous. En outre, il affiche toujours un message d'avertissement s'il ne trouve pas l' log4j.dtd. Maintenant, je suis curieux de savoir comment résoudre ce problème.

J'ai essayé quelques petites choses et de ces travaux:

<!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 sommes à l'aide de Maven. Donc, j'ai essayé ceci, mais il é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 généralement sait comment traiter avec le classpath variables, mais pourquoi ne pas ce travail? Je sais que la référence ne fonctionne pas lors de l'exécution, mais ni un simple log4j.dtd (si je ne me trompe pas), donc ça ne devrait pas être un problème.

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

185voto

Jack Leow Points 11081

Je sais que cette question a été posée, mais je tiens à offrir mes légèrement différentes alternatives:

<!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 semblable à @FrVaBe de la réponse, mais sur le côté positif, ne nécessite aucune autre configuration Eclipse (c'est à dire que, si vous partagez votre projet avec d'autres personnes, ou d'avoir une grande équipe, c'est une chose de moins à s'inquiéter).

L'inconvénient, cependant, est que je crois que cela signifie que vous aurez besoin d'une connexion Internet (au moins à un certain moment au cours du développement, même si c'est juste une de temps).

41voto

FrVaBe Points 14559

Essayez d'ajouter le log4j.dtd en tant qu'Utilisateur Sepcific URI Catalogue XML Entrée dans "Préférences -> XML -> XML Catalogue". Comme je sais que c'est l'endroit où eclipse gère les références à la définition/validation des fichiers (comme xsd). Si ils peuvent être trouvés ici eclipse a besoin d'aucun accès à internet pour y accéder sur leur origine (web) emplacement.

J'ai fait comme ceci (pour le test) et eclipse 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 aussi ${M2_REPO} œuvres - je n'ai pas vérifier ce point.

Utiliser le natif URL dans votre log4j.xml par la suite

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

MODIFIER

J'irais avec la solution ci-dessus mais pour en revenir à votre question, je pense que la classe variables de chemin d'accès "peut être utilisé dans une Java Build Path'. Pourquoi devraient-ils travailler à l'intérieur d'un DOCTYPE définition? "Valider" (eclipse menu contextuel) log4j.xml fichier et vous obtiendrez un avertissement que le chemin ne peut pas être résolu.

J'espère classpath:org/apache/log4j/xml/log4j.dtd ferait l'affaire, mais que le protocole est également pas en charge (voir erreur de validation). J'ai peur qu'il ne va pas travailler hors de la boîte...

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

2voto

Dileep Points 21

J’ai ajouté le dossier DTD dans webcontent et puis j’ai copié le fichier dtd log4j dans celui. Ensuite, j’ai essayé comme ci-dessous. Son travail

Chemin signifie ici le chemin d’accès du projet comme``

1voto

Abel ANEIROS Points 506

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 la clé et il fonctionne.

« Préférences -> XML -> catalogue XML »

1voto

wbdarby Points 121

@Jack Leow utilise une bonne approche avec l’identifiant PUBLIC. Pourtant, comme il le souligne, il nécessite une connexion réseau.

Je préfère une combinaison :

Cela fait référence à un bocal local et prend en charge une déclaration DOCTYPE sans l’URL complète.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X