Dear Chuck Caldarale & Others,
Thank you for your response!
Chuck - Your e-mail was very informative... I did remove the
servlet-apis from my %CATALINA_HOME%/mywebapp/%WEB-INF/lib directory.
The only reason I had it there was because I use Eclipse for
development and its easier to configure the build path by clicking on
"Add Jar" rather than clicking on "Add External Jar". But I took your
advice and removed it and now use "Add External Jar".
Here's my situation...
I changed my Ant build script to move the log4j.properties file into
my WEB-INF/classes dir. Also, my log4j-1.2.9.jar gets moved inside my
WEB-INF/lib dir. But for some odd reason, when I run Tomcat, it
doesn't seem to know where my log4j.properties file is! My
Log4jInitServlet seems to have the path wrong!
It looks inside:
C:\DevTools\tomcat\jakarta-tomcat-5.5.9\bin\WEB-INF\classes\log4j.properties
instead of:
C:\DevTools\tomcat\jakarta-tomcat-5.5.9\mywebapp\WEB-INF\classes\log4j.properties.
Furthermore, it throws a NullPointerException but at the same time,
right afterwards, it logs my XmlConfigInitServlet (I have it set
there!).
Here's what my console says:
--------------------------------------------------------------------------------------------------------
Dec 22, 2006 9:45:05 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive mywebapp.war
propFile path is: WEB-INF\classes\log4j.properties
log4j.properties not found,
C:\DevTools\tomcat\jakarta-tomcat-5.5.9\bin\WEB-INF\classes\log4j.properties
2006-12-22 09:45:07,653 ERROR
[org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/mywebapp]]
- StandardWrapper.Throwable
java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:365)
at java.util.Properties.load(Properties.java:293)
at
com.acme.mywebapp.logging.Log4jInitServlet.init(Log4jInitServlet.java:27)
at javax.servlet.GenericServlet.init(GenericServlet.java:211)
at
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1091)
at
org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:925)
at
org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3857)
at
org.apache.catalina.core.StandardContext.start(StandardContext.java:4118)
at
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
at
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:788)
at
org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:677)
at
org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:473)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1102)
at
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1020)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1012)
at
org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
at
org.apache.catalina.core.StandardService.start(StandardService.java:450)
at
org.apache.catalina.core.StandardServer.start(StandardServer.java:683)
at org.apache.catalina.startup.Catalina.start(Catalina.java:537)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:271)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:409)
2006-12-22 09:45:07,669 ERROR
[org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/mywebapp]]
- Servlet /mywebapp threw load() exception
java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:365)
at java.util.Properties.load(Properties.java:293)
at
com.acme.mywebapp.logging.Log4jInitServlet.init(Log4jInitServlet.java:27)
at javax.servlet.GenericServlet.init(GenericServlet.java:211)
at
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1091)
at
org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:925)
at
org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3857)
at
org.apache.catalina.core.StandardContext.start(StandardContext.java:4118)
at
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
at
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:788)
at
org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:677)
at
org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:473)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1102)
at
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1020)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1012)
at
org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
at
org.apache.catalina.core.StandardService.start(StandardService.java:450)
at
org.apache.catalina.core.StandardServer.start(StandardServer.java:683)
at org.apache.catalina.startup.Catalina.start(Catalina.java:537)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:271)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:409)
2006-12-22 09:45:08,018 WARN
[com.acme.mywebapp.config.XmlConfigInitServlet] - Finished parsing the
config file.
Dec 22, 2006 9:45:09 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 4495 ms
--------------------------------------------------------------------------------------------------------
My Log4jInitServlet:
--------------------------------------------------------------------------------------------------------
package com.acme.mywebapp.logging;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.apache.log4j.PropertyConfigurator;
public class Log4jInitServlet extends HttpServlet {
public void init() throws ServletException {
Properties p = new Properties();
String file = getInitParameter("log4j-init-file");
File propFile = new File(file);
System.out.println("propFile path is: " + propFile);
try {
InputStream is =
getServletContext().getResourceAsStream("propFile");
if(!propFile.exists()){
System.out.println("log4j.properties not found, " +
propFile.getAbsolutePath());
}
p.load(is);
is.close();
} catch(IOException e) {
e.printStackTrace();
}
PropertyConfigurator.configureAndWatch(propFile.getAbsolutePath(),10000);
}
}
--------------------------------------------------------------------------------------------------------
My web.xml:
--------------------------------------------------------------------------------------------------------
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>mywebapp</display-name>
<description>
My web app
</description>
<servlet>
<servlet-name>MyWebAppServlet</servlet-name>
<servlet-class>com.acme.mywebapp.MyWebAppServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyWebAppServlet</servlet-name>
<url-pattern>/app</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>log4j-init</servlet-name>
<servlet-class>
com.acme.mywebapp.logging.Log4jInitServlet
</servlet-class>
<init-param>
<param-name>log4j-init-file</param-name>
<param-value>WEB-INF/classes/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>xml-config-init</servlet-name>
<servlet-class>
com.acme.mywebapp.config.XmlConfigInitServlet
</servlet-class>
<init-param>
<param-name>xml-config-file</param-name>
<param-value>/WEB-INF/attributes-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
</web-app>
--------------------------------------------------------------------------------------------------------
My XmlConfigInitServlet class (as you can see that I am still using
getRealPath()) but will change it when I get my Log4jInitServlet
properly set up. For some odd reason, its logging what I have put in
here into my Tomcat's console. How could this be if Tomcat complained
that it couldn't find my log4j.properties file?
--------------------------------------------------------------------------------------------------------
package com.acme.mywebapp.config;
import java.io.File;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.apache.log4j.Logger;
import edu.ucsd.security.affiliates.model.AttributeBeanXmlConfigHelper;
public class XmlConfigInitServlet extends HttpServlet {
public void init() throws ServletException {
String prefix = getServletContext().getRealPath("/");
String file = getInitParameter("xml-config-file");
File xmlConfigFile = new File(prefix + file);
if (!xmlConfigFile.exists()) {
System.out.println("attributes-config.xml not found, "
+ xmlConfigFile.getAbsolutePath());
}
try {
// Configure Digester from XML ruleset
AttributeBeanXmlConfigHelper.parse(xmlConfigFile);
Logger.getLogger(this.getClass()).warn("Finished parsing the
config file.");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
--------------------------------------------------------------------------------------------------------
Here's the contents of my log4j.properties file located under
mywebapp/WEB-INF/classes:
log4j.rootCategory=WARN, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
--------------------------------------------------------------------------------------------------------
From the looks of everything, obviously there's a pathing issue in my
Log4jInitServlet but I still don't understand how it can successfully
log my XmlConfigServlet if my log4j.properties is supposed to be
unavailable?!
Can anyone suggest a better way to use getResourceAsStream()? What I
am trying to do is set my undeployWars to false in server.xml so that
Tomcat can read my log4j.properties file and my xml config file
(attributes-config.xml) from within the war file.
Many, many thanks!
Sincerely yours,
James Dekker
---------------------------------------------------------------------
To start a new topic, e-mail: [email protected]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]