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: users@tomcat.apache.org To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]