Looks like Struts has a dependency on Commons Logging which is using Log4j under the hood. The commons logging jar is being loaded from a "higher" level classloader (common/lib or server/lib) and can't access classes only provided by a "lower" classloader (your webapp).

Maybe try having the commons logging jar in your WEB-INF/lib.
Where is the struts jar you're using? WEB-INF/lib or higher?

Jon

Zsolt Koppany wrote:

Hi Shapira,

that is what I get when log4.jar is in my .../WEB-INF/lib.

struts.jar is also in my .../WEB-INF/lib. Can that cause the problem?
How can I fix that?

Zsolt

javax.servlet.ServletException: Error instantiating servlet class
org.apache.struts.action.ActionServlet
    at
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:912)
    at
org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:823)
    at
org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3420)
    at
org.apache.catalina.core.StandardContext.start(StandardContext.java:3608)
    at
org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1188)
    at
org.apache.catalina.core.StandardHost.start(StandardHost.java:738)
    at
org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1188)
    at
org.apache.catalina.core.StandardEngine.start(StandardEngine.java:347)
    at
org.apache.catalina.core.StandardService.start(StandardService.java:497)
    at
org.apache.catalina.core.StandardServer.start(StandardServer.java:2190)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:512)
    at org.apache.catalina.startup.Catalina.execute(Catalina.java:400)
    at org.apache.catalina.startup.Catalina.process(Catalina.java:180)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:203)
----- Root Cause -----
java.lang.NoClassDefFoundError: org/apache/log4j/Layout
    at
org.apache.commons.logging.impl.Log4jFactory.getInstance(Log4jFactory.java:140)
    at
org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:257)
    at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:390)
    at
org.apache.struts.action.ActionServlet.<clinit>(ActionServlet.java:375)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown
Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown
Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at java.lang.Class.newInstance0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:903)
    at
org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:823)
    at
org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3420)
    at
org.apache.catalina.core.StandardContext.start(StandardContext.java:3608)
    at
org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1188)
    at
org.apache.catalina.core.StandardHost.start(StandardHost.java:738)
    at
org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1188)
    at
org.apache.catalina.core.StandardEngine.start(StandardEngine.java:347)
    at
org.apache.catalina.core.StandardService.start(StandardService.java:497)
    at
org.apache.catalina.core.StandardServer.start(StandardServer.java:2190)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:512)
    at org.apache.catalina.startup.Catalina.execute(Catalina.java:400)


On Wed, 2003-08-06 at 22:01, Shapira, Yoav wrote:


Howdy,


I have tried so many things to use log4j from tomcat and struts and
finaly I found the solution that I have to copy log4.jar into

common/lib


server/lib and <application>/WEB-INF/lib (to be able to get jsp files
compiled). I find it a bit complicated that I have to copy the same jar
file into three different directories.

Is there a better way?

Simply put log4j.jar in WEB-INF/lib, and your log4j configuration file in WEB-INF/classes. That's it. Don't have copies of log4j in commons/lib or server/lib, nor a log4j configuration file there.

Yoav Shapira



This e-mail, including any attachments, is a confidential business communication, and may contain information that is confidential, proprietary and/or privileged. This e-mail is intended only for the individual(s) to whom it is addressed, and may not be saved, copied, printed, disclosed or used by anyone else. If you are not the(an) intended recipient, please immediately delete this e-mail from your computer system and notify the sender. Thank you.


--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to