Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations SkipVought on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Log4J and commons-logging

Status
Not open for further replies.

mluken

Programmer
Dec 31, 2003
54
0
0
US
I have decided to implement Log4J in my web applications. After setting this up, I realized that I had a problem when using a particular page that utilizes the HttpClient class in commons-httpclient.jar.

Apparently, that class requires the commons-logging.jar (which I removed when putting the Log4J file in its place).

If I replace the commons-logging jar, and remove the Log4J.jar, the page shows correctly. However, if I add my Log4J.jar to my classpath, it dies again.

If my Log4J.jar is in my common directory, the servlet fails to instantiate. If I remove it from there and put it in my WEB-INF/lib directory, the servlet starts up, but gets an error when creating the HttpClient object:

Code:
javax.servlet.ServletException: Servlet execution threw an exception
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:222)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:146)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:209)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:144)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
	at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2358)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:133)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
	at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
	at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:420)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:127)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
	at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152)
	at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:300)
	at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:374)
	at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:743)
	at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:675)
	at org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:866)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
	at java.lang.Thread.run(Thread.java:534)


root cause 

java.lang.ExceptionInInitializerError
	at com.lmp.framework.mappers.NewsMapper.retrieveXML(NewsMapper.java:120)
	at com.lmp.framework.mappers.NewsMapper.createObject(NewsMapper.java:41)
	at com.lmp.framework.persistence.LMPPersistence.buildDomainObjects(LMPPersistence.java:209)
	at com.lmp.framework.pageview.PageView.setDomainXML(PageView.java:247)
	at com.lmp.framework.pageview.PageViewGeneric.processPage(PageViewGeneric.java:52)
	at com.lmp.framework.pageview.PageViewGeneric.transform(PageViewGeneric.java:142)
	at com.lmp.framework.servlets.LMPServlet.doGet(LMPServlet.java:144)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:696)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:809)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:200)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:146)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:209)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:144)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
	at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2358)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:133)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
	at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
	at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:420)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:127)
	at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
	at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152)
	at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:300)
	at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:374)
	at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:743)
	at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:675)
	at org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:866)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
	at java.lang.Thread.run(Thread.java:534)
Caused by: org.apache.commons.logging.LogConfigurationException: org.apache.commons.logging.LogConfigurationException: No suitable Log constructor [Ljava.lang.Class;@13bdd36 for org.apache.commons.logging.impl.Log4JLogger
	at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:532)
	at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:272)
	at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:246)
	at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:395)
	at org.apache.commons.httpclient.HttpClient.<clinit>(HttpClient.java:101)
	... 42 more
Caused by: org.apache.commons.logging.LogConfigurationException: No suitable Log constructor [Ljava.lang.Class;@13bdd36 for org.apache.commons.logging.impl.Log4JLogger
	at org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogFactoryImpl.java:432)
	at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:525)
	... 46 more
Caused by: java.lang.NoClassDefFoundError: org/apache/log4j/Logger
	at java.lang.Class.getDeclaredConstructors0(Native Method)
	at java.lang.Class.privateGetDeclaredConstructors(Class.java:1610)
	at java.lang.Class.getConstructor0(Class.java:1922)
	at java.lang.Class.getConstructor(Class.java:1019)
	at org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogFactoryImpl.java:429)
	... 47 more

Any thoughts at all????
 
Which version of Tomcat, which version of Log4j, what does your log4j.lcf file look like ...

--------------------------------------------------
Free Database Connection Pooling Software
 
Tomcat is version 4.1 (although I just replaced the commons-logging.jar with the most recent as somebody told me to do that.... Log4J is version 1.2.9. What is a lcf file? I have created a log4j properties file? Is that what you are referring to?
 
Yes, the lcf file - properties file.

Personally, I have found compatibility issues between tomcat & some log4j versions in the past, but those versions I would have thought would be OK.

I'm not sure how to fix this ... but maybe we could take another route. What does this HttpClient class do ? Its probably easy to write your own. If you could explain what you are trying to do, we could maybe go down that route ...

--------------------------------------------------
Free Database Connection Pooling Software
 
Here is my log4j.properties:

log4j.rootCategory=DEBUG, RootAppender
log4j.appender.RootAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.RootAppender.DatePattern='.'yyyy-MM-dd
log4j.appender.RootAppender.File=C:/Inetpub/logs/lmpframework.log
log4j.appender.RootAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.RootAppender.layout.ConversionPattern=%d - %3c - %m%n

Pretty straight forward at the moment.... Like I said, if I go at other pages that don't use the HttpClient, it works like a charm.

I have found people that have similar problems, but nobody has really given me an example? When HttpClient is used, it uses the logging in the logging common somehow. I don't' really understand though how just having the log4j.jar could keep it from doing that?
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top