Konflikt in log4j beim laden von Bibliotheken für die DOM? (Andere Implementierungen des dom in den classpath nicht erlaubt?)
Ich versuchte log4j in eine web-Anwendung in Tomcat 7.
Ich habe die log4j-Bibliothek in der WEB-INF\lib
meiner web-Anwendung.
Ich habe Folgendes log4j.xml unter WEB-INF\classes
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- Log output to Console -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n"/>
</layout>
</appender>
<appender name="rolling" class="org.apache.log4j.RollingFileAppender">
<param name="file" value="myLogfile.log"/>
<param name="append" value="true" />
<param name="encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n"/>
</layout>
</appender>
<!-- Log to both Console and File -->
<root>
<priority value ="debug" />
<appender-ref ref="console" />
<appender-ref ref="rolling" />
</root>
</log4j:configuration>
Logge ich mich z.B. in einem servlet oder filter, die ich kenne, sind be-aber ich kann nicht sehen, die Ausgabe von log-überall.
E. g.
Logger log = Logger.getLogger(MyFilter.class);
und in doFilter
ich log also log.debug("logging information); log.error("logging information);
Kann ich nicht sehen, die Ausgabe in der Tomcat-Konsole als Folge der Konsole appender
und ich sehe nicht, das myLogfile.log
erstellt.
Ich bin nicht sicher, wo ist diese Datei soll erstellt werden.
Sehe ich nur System.out
Aussagen von servlets und Filter.
Was mache ich hier falsch?
UPDATE:
Ich habe in den classpath xercesImpl.jar
und jaxb-impl.jar
. Könnte dies ein Problem verursachen?
Bemerkte ich, dass die folgende Ausnahme verpasste ich früher in der Tomcat-Konsole:
log4j:WARN Fehler bei der Standard-Initialisierung
java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal
bei java.lang.ClassLoader.defineClass1(Native-Methode)
bei java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
bei java.lang.ClassLoader.defineClass(ClassLoader.java:615)
bei java.Sicherheit.SecureClassLoader.defineClass(SecureClassLoader.java:141)
bei org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2823)
bei org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1160)
bei org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1655)
bei org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1533)
bei org.apache.xerces.Parser.AbstractDOMParser.startDocument(Unbekannt
Quelle)
bei org.apache.xerces.impl.dtd.XMLDTDValidator.startDocument(Unbekannt
Quelle)
bei org.apache.xerces.impl.XMLDocumentScannerImpl.startEntity(Unbekannt
Quelle)
bei org.apache.xerces.impl.XMLVersionDetector.startDocumentParsing(Unbekannt
Quelle)
bei org.apache.xerces.Parser.XML11Configuration.parse(Unknown Source)
bei org.apache.xerces.Parser.XML11Configuration.parse(Unknown Source)
bei org.apache.xerces.Parser.XMLParser.parse(Unknown Source)
bei org.apache.xerces.Parser.DOMParser.parse(Unknown Source)
bei org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
bei org.apache.log4j.xml.DOMConfigurator$2.parse(DOMConfigurator.java:767)
bei org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:866)
bei org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:773)
bei org.apache.log4j.Helferinnen und Helfer.OptionConverter.selectAndConfigure(OptionConverter.java:483)
bei org.apache.log4j.LogManager.(LogManager.java:127)
bei org.apache.log4j.Logger.getLogger(Logger.java:117)
bei com.test.Meines filters.(Meinfilter.java:26)
bei der sun.reflektieren.NativeConstructorAccessorImpl.newInstance0(Native-Methode)
bei der sun.reflektieren.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
bei der sun.reflektieren.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
bei java.lang.reflektieren.Konstruktor.newInstance(Constructor.java:513)
bei java.lang.Klasse.newInstance0(Klasse.java:355)
bei java.lang.Klasse.newInstance(Class.java:308)
bei org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:125)
bei org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:256)
bei org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:382)
bei org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFilterConfig.java:103)
bei org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4624)
bei org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5281)
bei org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
bei org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:866)
bei org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:842)
bei org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615)
bei org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1095)
bei org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1617)
bei java.util.gleichzeitige.Vollzieher$RunnableAdapter.call(Vollzieher.java:441)
bei java.util.gleichzeitige.FutureTask$Sync.innerRun(FutureTask.java:303)
bei java.util.gleichzeitige.FutureTask.run(FutureTask.java:138)
bei java.util.gleichzeitige.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
bei java.util.gleichzeitige.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
bei java.lang.Thread.run(Thread.java:662), Verursacht durch: java.lang.ClassNotFoundException: org.w3c.dom.ElementTraversal
bei org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1688)
bei org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1533)
... 48 mehrlog4j:WARN No appenders gefunden werden konnte, der für den logger (com.test.Meinfilter).
log4j:WARN Bitte initialisieren Sie die log4j-Systems richtig. log4j:WARN Sehen
http://logging.apache.org/log4j/1.2/faq.html#noconfig für mehr info.
Du hast Recht.Ich aktualisiert die post
Es scheint, Sie haben ein class loader problem beim Parsen der log4j-Konfiguration xml.
Ich werde aktualisieren Sie den OP-Titel, um diese zu reflektieren
Sie haben xerces.jar in Ihrem app-lib-Ordner? Wenn nicht würd ich dir empfehlen, um es hinzuzufügen. xerces.apache.org/#xerces2-j Es hat die
Element Traversal (org.w3c.dom.ElementTraversal)
InformationsquelleAutor Cratylus | 2012-01-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wohl auch nur hier, aber Ihnen fehlen die schließen
</log4j:configuration>
Und die Datei, die Sie schreiben können:
oder
Wie sind Sie auf die Anmeldung in Ihrer servlet-Klassen? Setzen Sie ein Beispiel für den import und die Sätze
Ich denke, Sie tun so etwas wie dieses, nicht?:
UPDATE:
Das problem ist eine fehlende Abhängigkeit in der class-loader, wenn Sie versuchen zu analysieren, das Log4j-XML, nicht nur ein problem in der Log4j-Konfiguration.
Das log zeigt, dass
org/w3c/dom/ElementTraversal
fehlt. MitxercesImpl.jar
schon, die xml-apis.jar benötigt wirdAls hier angegeben http://xerces.apache.org/xerces2-j/install.html die alten xerces.jar enthalten sind alle Klassen in eine jar, sondern neue Verteilung der xerces teilt es in
xercesImpl.jar
undxml-apis.jar
Zitiert:
xerces.jar ist nicht mehr in der main-distribution. Sie können immer noch download mit diesem jar von veraltet Verteilung. xerces.jar ist eine Jar-Datei enthält alle parser-Klasse-Dateien (D. H., es enthält die Schnittmenge der Inhalte xercesImpl.jar und xml-apis.jar).
Zu verwenden Sie einen anderen XML-parser einfach entfernen xercesImpl.jar und fügen Sie eine weitere Bibliothek zur Implementierung. Das problem war nur die Verwendung von xercesimpl.jar ohne xml-apis.jar
+1 für die fehlenden
xml-apis.jar
Wo sind diese Abhängigkeiten dokumentiert?
Bearbeitet für mehr Erklärung
InformationsquelleAutor Aleja_Vigo
Ich würde gerne meine Erfahrung mit einem problem, das sehr ähnlich wie diese, war nicht gelöst, indem Sie die oben genannten Antworten, vielleicht hat jemand die gleiche Erfahrung irgendwann.
In meinem Fall log4j war nicht in der Lage zum Parsen der xml-version der log4j-Eigenschaftendatei und dies geschah, obwohl das Projekt enthaltenen beide xerces und xml-apis.
Ich es stellte sich heraus, dass, wenn wir ein Upgrade im Lieferumfang enthalten Paket (Selen 2.28) die enthalten xerces-Paket enthalten war, aber nicht sichtbar log4j aus irgendeinem Grund.
Ich gelöst, indem nur die xerces 2.10 und nicht auf den xml-apis.
Bitte beachten Sie, dass dies ein Sonderfall ist und testen Sie diese als letztes Mittel, wenn die oben genannten Tipps nicht funktionieren.
+1 zu der Antwort oben, dass hat mir geholfen, zu finden mein Problem.
Andere Sache, die mir viel geholfen wurde-Dlog4j.debug-VM-argument, das zeigt, dass log4j findet die log4j.xml Datei-und mehr.
InformationsquelleAutor javabeangrinder
Bewegen log4j jar-Datei in den tomcat-lib-Ordner.
Bewegen log4j.xml in den /src Ordner.
Beim erstellen der war-Datei, die log4j.xml werden im Innern der Krieg automatisch.
WEB-INF\classes
.Sie sagen, es ist der falsche Ort, um es?Log4j.xml ist an der richtigen Stelle. Das gleiche für das Glas.
InformationsquelleAutor Scorpio