J'utilise log4j depuis un certain temps maintenant et j'utilise généralement ceci en haut du 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 écrire le XML et tout. De plus, il affiche toujours un avertissement indiquant qu'il ne trouve pas le fichier log4j.dtd
. Maintenant, je suis curieux de savoir comment résoudre ce problème.
J'ai essayé quelques 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é ceci, 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 de chemin de classe, 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 une simple log4j.dtd
(si je ne me trompe pas), donc cela ne devrait pas être un problème.
Quelqu'un peut-il s'il vous plaît faire la lumière à ce sujet?
la source
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 le 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 leur emplacement natif (Web).
Je l'ai fait comme ça (pour test) et eclipse ne se plaint pas:
Peut-être aussi que $ {M2_REPO} fonctionne - je n'ai pas vérifié cela.
Utilisez ensuite l'URL native dans votre log4j.xml
ÉDITER
J'irais avec la solution ci-dessus mais pour revenir à votre question, je pense que les variables de chemin de classe «peuvent être utilisées dans un chemin de construction Java» . Pourquoi devraient-ils fonctionner dans une définition DOCTYPE? "Validez" (menu contextuel de l'éclipse) le fichier log4j.xml et vous obtiendrez un avertissement indiquant que le chemin ne peut pas être résolu.
J'espérais
classpath:org/apache/log4j/xml/log4j.dtd
faire l'affaire mais ce protocole n'est pas non plus pris en charge (voir erreur de validation). J'ai peur que cela ne fonctionne pas dès le départ.Et, comme je l'ai compris, la
SYSTEM "log4j.dtd"
notation n'est pas un espace réservé. Il s'agit d'une référence valide à un document que l'on s'attend à trouver à côté du dtd (dans ce cas).la source
log4j.jar
ensemble. Je suppose que "log4j.dtd" est une sorte de paramètre fictif car c'est un nom si général. - Oui, copier le log4j.dtd à côté du XML serait une solution, mais est-ce vraiment une manière courante de le faire?SYSTEM "log4j.dtd"
est la façon de le faire .J'ai ajouté le dossier DTD dans le contenu Web, puis j'ai copié le fichier log4j dtd dans celui-ci. alors j'ai essayé comme ci-dessous. Ça marche
Chemin signifie ici le chemin du projet comme
/projectname
la source
J'ai essayé avec la réponse de FrVaBe mais cela n'a pas fonctionné pour moi et j'ai fait un petit changement dans la valeur de la clé et cela fonctionne.
"Préférences -> XML -> Catalogue XML"
la source
@Jack Leow utilise une bonne approche avec l'ID PUBLIC. Pourtant, comme il le souligne, cela nécessite une connexion réseau.
Je préfère une combinaison:
Cela fait référence à un JAR local et prend en charge une déclaration DOCTYPE sans l'URL complète.
la source
Habituellement, Eclipse recherche
log4j.dtd
dans classpath et il ne le trouve pas là-bas et donc l'erreur. Nous pouvons résoudre ce problème en fournissant une URL pour lelog4j.dtd
fichier comme ci-dessous.la source