You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by "Akoulov, Alexandre [IT]" <al...@citigroup.com> on 2005/11/23 08:50:29 UTC

default logging in tomcat 5.5

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
	org.apache.juli.FileHandler@ff8c74 // 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.


Kind regards,

Alexandre.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Re: default logging in tomcat 5.5

Posted by Remy Maucherat <re...@gmail.com>.
On 11/23/05, Akoulov, Alexandre [IT] <al...@citigroup.com> 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
>         org.apache.juli.FileHandler@ff8c74 // 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: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org