Frage

Ich habe ein problem mit einem logging-setup in einer apring webapp bereitgestellt unter tomcat 6.

Die webapp verwendet die commons-logging-api zur Laufzeit log4j verwendet werden sollte.Die log-Datei wird angelegt, bleibt aber leer - keine log-Einträge auftreten.

das setup ist Folgendes:

WEB-INF/web.xml:

 <context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/log4j.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  </listener>

WEB-INF/classes/commons-logging.Eigenschaften:

org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger

WEB-INF/log4j.xml:

<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>

  <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
    ...
  </appender>
  <appender name="FILE" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="${catalina.home}/logs/my.log"/>
    ...
  </appender>

  <logger name="my.package">
    <level value="INFO"/>
  </logger>

  <root>
    <level value="ERROR"/>
    <appender-ref ref="CONSOLE"/>
    <appender-ref ref="FILE"/>
  </root>
</log4j:configuration>

Die Datei logs/my.Protokoll erstellt wird, aber keine logs angezeigt.Die info-Protokolle auf dem tomcat-Konsole, aber nicht mit dem layout des Musters konfiguriert.

Die commons-logging-1.1.1.jar und log4j-1.2.14.jar enthalten sind in WEB-INF/lib.Irgendeine Idee, was ist hier falsch?

War es hilfreich?

Lösung

Es gibt zahlreiche dokumentierte Fälle, die im Internet die Menschen über die Verwendung von commons-logging warnen. So sehr, dass SLF4J wird eine Menge an Popularität gewinnt.

In Anbetracht, dass Sie bei der Verwendung von Tomcat mit Log4j nicht interessiert sind, sollten Sie nur Log4j direkt in Ihrer Anwendung verwenden. Besonders, wenn es keine Chance, dass Sie Logging Frameworks in Zukunft Schalt werden. Es wird die Komplexität der Anwendung reduzieren und loszuwerden aller Klassenlade Probleme, die Sie mit commons-logging haben.

Dies sollte eine relativ einfache Suche und in Ihrem Text ersetzen, als commons-Protokollierung und log4j beide eine ähnliche Aufrufstruktur für ihre Logging-Methoden verwenden.

Andere Tipps

Seien Sie besonders vorsichtig, dass Sie nicht platziert log4j.jar im Tomcat commons / lib. Wenn die Wurzel Classloader die log4j Bibliotheken lädt, werden Sie in Konflikte und Probleme bei der Initialisierung ausgeführt, wenn Ihre Webapps auch versuchen, log4j zu verwenden.

Wenn Sie log4j für gemeinsame Tomcat Protokollierung verwenden müssen, müssen Sie darauf achten, dass Ihre Webapps nicht versuchen, log4j als auch zu laden. Wenn Sie mehrere Webapps auf dem Server haben, dann müssen Sie Disziplin, die jedes Protokoll Initialisierung der Webapp nicht auf die Initialisierung von anderen Webapps nicht stampfen. Jeder Webapp muß eindeutiges Logger-IDs verwenden, die mit einzigartigen Paketnamen erreicht werden können.

ein gemeinsames log4j in Tomcat mit mehreren Webapps Verwendung verursacht schwere Konflikte, wenn Sie Bibliotheken geteilt haben, die alles tun, Protokollierung möchten, wie Hibernate oder Frühling. Die nächste webapp die log4j zu initialisieren versucht, kann der Logger des vorherigen schließen. Es kann ein Chaos sein.

Ich hatte ähnliches Problem und ein Update jetzt gefunden. Starten Sie tomcat mit zusätzlichen Parameter:

-Dorg.apache.commons.logging.LogFactory = org.apache.commons.logging.impl.LogFactoryImpl

Sie müssen die zusätzliche Komponente für die vollständige commons-logging kompilieren. Standardmäßig verwendet Tomcat 6 eine hartcodierte Implementierung von commons-logging, dass immer Delegierten java.util.logging.

Bauanleitung hier http://tomcat.apache.org/tomcat- 6.0-doc / building.html

Dann ersetzen Sie die tomcat-juli.jar im Verzeichnis / sind von Tomcat und legen Sie den tomcat-juli-adapters.jar im Verzeichnis / lib zusammen mit log4j und Konfig.

Wenn Sie log4j + gemeinsame Protokollierung verwenden, können Sie die meisten oben genannten Konfigurationen vermeiden. gemeinsame Protokollierung LogFactory eine Ermittlungs-Funktion ähnlich wie JAXP hat Vorrang in der folgenden, für Log-Implementierungen suchen,    1. Konfigurationsattribut org.apache.commons.logging.Log innen Datei commons-logging.properties    2. Systemeigenschaft org.apache.commons.logging.Log    3. Wenn die Log4J bei Klassenpfad verfügbar ist, verwenden, um die entsprechenden Hüllklasse (Log4JLogger).    4. Jdk14Logger    5. SimpleLog

nur sicherstellen, dass sowohl Common-logging.jar und Common-Logging-api.jar und log4j.jar bei Classpath.

Kann sein das ich falsch bin.Versuchen Sie bitte Folgendes:

A) Fügen Sie appender zu meinen.Paket als:ODER B) die Anzahl der log leve von der Wurzel zur INFO

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top