2009-05-12 7 views
2

Ich habe mehrere Web-Apps auf einem Tomcat 5.5-Server, und ich arbeite daran, das gesamte System für die Protokollierung zu verbessern/zu aktualisieren. Mit logback-classic hatte ich schon etwas Erfolg. Allerdings, wenn ich versuche logback-Zugang zu nutzen (dh das lbAccessStatus Servlet zugreifen), erhalte ich diese Ausnahme:Wie verwende ich Logback-Zugang in Kombination mit Tomcat 5.5?

 
exception 

javax.servlet.ServletException: 
    Wrapper cannot find servlet class 
    ch.qos.logback.access.ViewStatusMessagesServlet 
    or a class it depends on 

org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433) 
... 

root cause 

java.lang.ClassNotFoundException: 
    ch.qos.logback.access.ViewStatusMessagesServlet 

org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1386) 
... 

Ich habe alles eingerichtet nach den docs:

 
    common/lib: 
    logback-classic-0.9.15.jar 
    logback-core-0.9.15.jar 
    server/lib: 
    logback-access-0.9.15.jar 

Umher dem Bibliotheken scheint nicht zu helfen. logback-classic scheint gut zu funktionieren, nur der Logback-Zugriff verursacht Probleme.

Antwort

0

Ich habe Logback-Zugriff mit Tomcat noch nicht verwendet. Ich habe es nur mit Steg ...

Ich würde vorschlagen, die folgende Einstellung, um zu versuchen, aber:

common/lib: 
    logback-access-0.9.15.jar 
    logback-classic-0.9.15.jar 
    logback-core-0.9.15.jar 
server/lib: 
    logback-access-0.9.15.jar 
    logback-core-0.9.15.jar 

logback-Zugang hat logback-Kern als Abhängigkeit. Da Sie es sowohl auf dem Server (dem Valve) als auch in Ihrer Webanwendung (dem ViewStatusMessagesServlet) verwenden, sollten Sie es beiden Klassenpfaden hinzufügen.

Sie könnten (und sollten?) Auch logback-access, logback-classic und logback-core zu Ihrem webapp-classpath hinzufügen, anstatt ihn zu common/lib hinzuzufügen, damit er für alle Webapps verfügbar ist.

Hoffe, dass hilft.

-1

Wenn Sie logback-access auch in common/lib setzen, damit alle Jars da sind, sollte es überall verfügbar sein. Hast du das probiert?

Auch die Protokollierung wurde in Tomcat 6 überarbeitet. Besteht eine Upgrade-Möglichkeit?

+0

Gläser Spreading um fühlt sich so wie dll Hölle . Sie müssen mit Classloader-Details debuggen. – whatnick

+0

whatnick, in diesem Fall, bitte schreibe deine bessere Antwort. –

1

Ich habe es funktioniert. Mit maven und logback-classic enden die Gläser in WEB-INF/lib und es funktioniert gut. Ich habe den gleichen Fehler nur bei der Bereitstellung der alten Version von WAR gesehen.

Auszug aus Abhängigkeiten Abschnitt meiner pom.xml

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>${slf4j.version}</version> 
</dependency> 
<dependency> 
    <groupId>ch.qos.logback</groupId> 
    <artifactId>logback-classic</artifactId> 
    <version>0.9.21</version> 
</dependency> 

... und relevante Teil meiner web.xml:

<servlet> 
    <servlet-name>LogbackViewStatusMessages</servlet-name> 
    <servlet-class>ch.qos.logback.classic.ViewStatusMessagesServlet</servlet-class> 
    </servlet> 
    <!-- see http://localhost:8080/oam-portal-portlets/logs --> 
    <servlet-mapping> 
    <servlet-name>LogbackViewStatusMessages</servlet-name> 
    <url-pattern>/logback</url-pattern> 
    </servlet-mapping>