On 11/23/05, Akoulov, Alexandre [IT] <[EMAIL PROTECTED]> wrote: > Hi all, > > I am in the process of upgrading from tomcat-3.3 to tomcat-5.5 and would > greatly appreciate if you could let me know whether I understood tomcat-5.5's > default logging correctly. > > As of tomcat 5.5 Context element does not have a Logger sub-element. Logging > can be configured with log4j or java.util.logging. I went with > java.util.logging, which is turned on by default and uses > <CATALINA_HOME>/conf/logging.properties. To be more exact Tomcat does not use > java.util.logging as is but rather "will, in the default configuration, > replace the default LogManager implementation with a container friendly > implementation called JULI" (extract from > http://tomcat.apache.org/tomcat-5.5-doc/logging.html) > > The following describes how the default logging (ie java.util.logging) works > in tomcat-5.5 (well, it describes how I saw it working :) ): > > I. > When using <CATALINA_HOME>/conf/logging.properties from the box (ie without > any modifications) all the logging performed in the particular web app goes > to the handlers defined in the .handlers clause, or in other words it gets > logged into the logs/catalina.<dateStamp>.txt file and the console. In > addition, all the exceptions thrown by the web app go to the 2localhost > handler, ie they are logged into the localhost.<dateStamp>.log > > That's what <CATALINA_HOME>/conf/logging.properties has: > -------------------------------------------------- > handlers = 1catalina.org.apache.juli.FileHandler, ...., > 2localhost.org.apache.juli.FileHandler,... > > .handlers = 1catalina.org.apache.juli.FileHandler, > java.util.logging.ConsoleHandler > > .... > 1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs > 1catalina.org.apache.juli.FileHandler.prefix = catalina. > .... > 2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs > 2localhost.org.apache.juli.FileHandler.prefix = localhost. > -------------------------------------------------- > > that is what our web app has > -------------------------------------------------- > public class TestServlet extends HttpServlet { > public void doGet(H.... > { > Logger logger1 = Logger.getLogger("test"); > Handler[] handlers = logger1.getHandlers(); > for (int i = 0; i < handlers.length; i++) { > Handler handler = handlers[i]; > System.out.println(handler); > } > System.out.println("handlers.size: " + handlers.length); > > logger1.info("INFO logging is successful"); > > throw new IllegalStateException("test exception"); > } > } > -------------------------------------------------- > > once TestServlet serves HTTP GET request the result is: > > a) Console has the following > handlers.size: 0 // result of System.out.println > Nov 23, 2005 5:24:37 PM com.SSMB.TestProj.servlets.TestServlet doGet > // result of logging > INFO: INFO logging is successful > > b) catalina.2005-11-23.log has the following: > Nov 23, 2005 5:24:37 PM com.SSMB.TestProj.servlets.TestServlet doGet > // result of logging > INFO: INFO logging is successful > > c) localhost.2005-11-23.log has the following > java.lang.IllegalStateException: test exception // > result of throwing the ISEx > at > com.SSMB.TestProj.servlets.TestServlet.doGet(TestServlet.java:45) > > > II. > If we want the logging performed by a particular web app and the exceptions > thrown by it to go to a particular file we can modify > <CATALINA_HOME>/conf/logging.properties. Let's assume that we have got a web > app that runs on the /test context. > > That's how <CATALINA_HOME>/conf/logging.properties should be modified > -------------------------------------------------- > # add new handler, 6test.org.apache.juli.FileHandler, to the list > handlers = > 1catalina.org.apache.juli.FileH....,...,6test.org.apache.juli.FileHandler > .... > ## new line - 'test' logger will only log into 6test handler > test.handlers=6test.org.apache.juli.FileHandler > ... > ## define 6test file handler - all logging done via 'test' logger > ## will go to test.<dateStamp>.txt file > 6test.org.apache.juli.FileHandler.level = FINE > 6test.org.apache.juli.FileHandler.directory = ${catalina.base}/logs > 6test.org.apache.juli.FileHandler.prefix = test. > .... > ## all of the exceptions coming from /test context are to be logged into > 6test handler. > org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/test].level = > INFO > org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/test].handlers > = 6test.org.apache.juli.FileHandler > -------------------------------------------------- > > once TestServlet (see its doGet method content above) serves HTTP GET request > the result is: > > a) Console has the following > [EMAIL PROTECTED] // result of System.out.println > handlers.size: 1 // result of > System.out.println > > b) test.2005-11-23.log has the following: > Nov 23, 2005 6:17:21 PM com.SSMB.TestProj.servlets.TestServlet doGet > // result of logging > INFO: INFO logging is successful > Nov 23, 2005 6:17:21 PM org.apache.catalina.core.StandardWrapperValve > invoke > SEVERE: Servlet.service() for servlet TestServlet threw exception > // result of throwing the ISEx > java.lang.IllegalStateException: test exception > at > com.SSMB.TestProj.servlets.TestServlet.doGet(TestServlet.java:45) > > > > Thanks a lot for reading my "tomcat5.5 default logging" novel. I'd greatly > appreciate if you could give me a feedback on whether I described the > tomcat5.5 logging behaviour correctly. >
Yes, since you don't have a configuration in your web application (WEB-INF/classes/logging.properties), everything uses the configuration of the container and it all depends on the logger names used. Note: you should be able to capture and log System.out stuff to the container logger using swallowOutput -- xxxxxxxxxxxxxxxxxxxxxxxxx Rémy Maucherat Developer & Consultant JBoss Group (Europe) SàRL xxxxxxxxxxxxxxxxxxxxxxxxx --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]