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.ConsoleAppenderlog4j.appender.stdout.layout=
org.apache.log4j.PatternLayoutlog4j.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: users@(protected)
To unsubscribe, e-mail: users-unsubscribe@(protected)
For additional commands, e-mail: users-help@(protected)