Ich benutze log4j jetzt schon eine ganze Weile und benutze es normalerweise oben in der log4j.xml (wahrscheinlich genau wie viele andere und laut Google ist dies der Weg, dies zu tun):
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
Offensichtlich funktioniert dies, aber Eclipse bietet keine kontextsensitive Hilfe zum Schreiben von XML und allem. Außerdem wird immer eine Warnung angezeigt, dass das nicht gefunden wird log4j.dtd
. Jetzt bin ich gespannt, wie ich das beheben kann.
Ich habe ein paar Dinge ausprobiert und diese funktionieren:
<!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">
Wie Sie von oben sehen können, verwenden wir Maven. Deshalb habe ich das versucht, aber es schlägt fehl:
<!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 weiß normalerweise, wie man mit den Klassenpfadvariablen umgeht, aber warum funktioniert das nicht? Ich weiß, dass die Referenz zur Laufzeit nicht funktioniert, aber auch nicht einfach log4j.dtd
(wenn ich mich nicht irre), so dass dies kein Problem sein sollte.
Kann jemand bitte ein Licht darauf werfen?
quelle
Versuchen Sie, die Datei log4j.dtd als benutzerspezifischen URI-XML-Katalogeintrag unter "Einstellungen -> XML -> XML-Katalog" hinzuzufügen. Wie ich weiß, ist dies der Ort, an dem Eclipse die Verweise auf Definitions- / Validierungsdateien (wie xsd) verwaltet. Wenn sie hier zu finden sind, benötigt eclipse keinen Internetzugang, um an ihrem nativen (Web-) Standort auf sie zugreifen zu können.
Ich habe es so gemacht (zum Test) und Eclipse beschwert sich nicht:
Vielleicht funktioniert auch $ {M2_REPO} - das habe ich nicht überprüft.
Verwenden Sie anschließend die native URL in Ihrer log4j.xml
BEARBEITEN
Ich würde mit der obigen Lösung gehen, aber um auf Ihre Frage zurückzukommen, denke ich, dass Klassenpfadvariablen 'in einem Java-Erstellungspfad verwendet werden können' . Warum sollten sie innerhalb einer DOCTYPE-Definition arbeiten? "Validieren" (Eclipse-Kontextmenü) der Datei log4j.xml und Sie erhalten eine Warnung, dass der Pfad nicht aufgelöst werden kann.
Ich hoffte,
classpath:org/apache/log4j/xml/log4j.dtd
dass ich den Trick machen würde, aber dieses Protokoll wird auch nicht unterstützt (siehe Validierungsfehler). Ich fürchte, es wird nicht sofort funktionieren.Und wie ich verstanden habe, ist die
SYSTEM "log4j.dtd"
Notation kein Platzhalter. Es ist ein gültiger Verweis auf ein Dokument, das voraussichtlich neben dem dtd gefunden wird (in diesem Fall).quelle
log4j.jar
als Ganzes. Ich gehe davon aus, dass "log4j.dtd" eine Art Platzhalter ist, da es sich um einen so allgemeinen Namen handelt. - Ja, das Kopieren von log4j.dtd neben XML wäre eine Lösung, aber ist dies wirklich eine übliche Methode?SYSTEM "log4j.dtd"
der Weg ist, dies zu tun .Ich habe den DTD-Ordner im Webinhalt hinzugefügt und dann die log4j dtd-Datei darin kopiert. dann habe ich es wie unten versucht. Es funktioniert
Pfad bedeutet hier den Projektpfad wie
/projectname
quelle
Ich habe es mit der Antwort von FrVaBe versucht, aber es hat bei mir nicht funktioniert und ich habe eine kleine Änderung am Schlüsselwert vorgenommen und es funktioniert.
"Einstellungen -> XML -> XML-Katalog"
quelle
@ Jack Leow verwendet einen guten Ansatz mit der PUBLIC ID. Er weist jedoch darauf hin, dass eine Netzwerkverbindung erforderlich ist.
Ich bevorzuge eine Kombination:
Dies verweist auf eine lokale JAR und unterstützt eine DOCTYPE-Deklaration ohne die vollständige URL.
quelle
Normalerweise sucht Eclipse
log4j.dtd
im Klassenpfad und findet es dort nicht und daher den Fehler. Wir können dieses Problem beheben, indem wir eine URL für dielog4j.dtd
Datei wie unten angeben.quelle