Author: kkolinko Date: Tue Nov 16 02:54:12 2010 New Revision: 1035518 URL: http://svn.apache.org/viewvc?rev=1035518&view=rev Log: Improve logging documentation. I completely rewrote the "Introduction" section of the page, to provide a lot more of details.
Modified: tomcat/trunk/webapps/docs/changelog.xml tomcat/trunk/webapps/docs/logging.xml Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1035518&r1=1035517&r2=1035518&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Tue Nov 16 02:54:12 2010 @@ -234,6 +234,9 @@ distributed Manager implementations to report full session information through the HTML Manager. (markt) </fix> + <update> + Improve Tomcat Logging documentation. (kkolinko) + </update> </changelog> </subsection> <subsection name="Other"> Modified: tomcat/trunk/webapps/docs/logging.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/logging.xml?rev=1035518&r1=1035517&r2=1035518&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/logging.xml (original) +++ tomcat/trunk/webapps/docs/logging.xml Tue Nov 16 02:54:12 2010 @@ -36,30 +36,123 @@ <section name="Introduction"> <p> - Tomcat uses + Logging in Apache Tomcat is implemented with the help of <a href="http://commons.apache.org/logging">Apache Commons Logging</a> - throughout its internal code. - Commons Logging provides Tomcat with the ability to log - hierarchically across various log levels without needing to rely on a + library. That library is a thin wrapper above different logging + frameworks. It provides Tomcat with the ability to log + hierarchically across various log levels without the need to rely on a particular logging implementation. </p> <p> - By default, only java.util.logging is available for the logs generated by - the Tomcat internal loggers, as Tomcat uses a package renamed commons - logging implementation which is hardcoded to use java.util.logging. Use of - alternative logging frameworks requires building or downloading an - <a href="extras.html">extras</a> component which include a full - commons-logging implementation. Instructions for configuring the extras - components to enable log4j to be used for Tomcat's internal logging may be - found below. + Since Tomcat 6.0, Tomcat uses a private package-renamed implementation of + Apache Commons Logging, to allow web applications to use their own + independent copies of the original Apache Commons Logging library. + In the default distribution this private copy of the library + is simplified and hardcoded to use the <code>java.util.logging</code> framework. </p> <p> - Tomcat no longer uses <code>localhost_log</code> as the runtime - exception/stack trace log. These types of error are usually thrown by - uncaught exceptions, but are still valuable to the developer. They can now - be found in the <code>stdout</code> log file (<code>catalina.out</code>). + To configure Tomcat to use alternative logging frameworks for its internal + logging, one has to replace the logging library with the one that is built + with the full implementation. Such library is provided as an <a href="extras.html">extras</a> + component. Instructions on how to configure Tomcat to use Log4j framework + for its internal logging may be found below. + </p> + + <p> + A web application running on Apache Tomcat can: + </p> + <ul> + <li> + Use logging API provided by the Java Servlets specification, + <code>javax.servlet.ServletContext.log(...)</code> + </li> + <li> + Use system logging API, <code>java.util.logging</code>. + </li> + <li> + Use any logging framework of its choice. + </li> + </ul> + + <p> + The logging frameworks used by different web applications run independently + of each other. See <a href="class-loader-howto.html">class loading</a> + for more details. + The exception to this rule is <code>java.util.logging</code>, if it used + directly or indirectly by your logging library. That is because it is loaded + by the system and is shared across web applications. + </p> + + <p> + Apache Tomcat has its own implementation of several key elements of + <code>java.util.logging</code> API. This implementation is called "JULI". + The key component there is a custom LogManager implementation, + that is aware of different web applications running on Tomcat (and + their different class loaders). It supports private per-application + logging configurations. It is also notified by Tomcat when a web application + is unloaded from memory, so that the references to its classes can be + cleared, preventing memory leaks. + This <code>java.util.logging</code> implementation is enabled by providing + certain system properties when starting Java. The Apache Tomcat startup + scripts do this for you, but if you are using different tools to run + Tomcat (such as jsvc, or running Tomcat from within an IDE), you should + take care of them by yourself. + More details about Tomcat JULI may be found below. + </p> + + <p> + The calls to <code>javax.servlet.ServletContext.log(...)</code> to write + log messages are handled by internal Tomcat logging. Such messages are + logged to the category named + </p> + <source>org.apache.catalina.core.ContainerBase.[${engine}].[${host}].[${context}]</source> + <p> + This logging is performed according to the Tomcat logging configuration. You + cannot overwrite it in a web application. + </p> + + <p> + Old applications that still use <code>System.out</code> or <code>System.err</code> + can be tricked, by setting <code>swallowOutput</code> attribute on a + <a href="config/context.html">Context</a>. If the attribute is set to + <code>true</code>, calls to <code>System.out/err</code> during request + processing will be intercepted, and their output will be fed to the + logging subsystem using the + <code>javax.servlet.ServletContext.log(...)</code> calls.<br /> + <strong>Note</strong>, that this feature is actually a trick, + and works only with direct calls to <code>System.out/err</code>, + and only during request processing cycle. It cannot be used to intercept + logging frameworks that themselves write to the system streams, + as those start early and may obtain a direct reference to the streams. + </p> + + <p> + The default logging configuration in Apache Tomcat writes the same + messages to the console and to a log file. This is great when using + Tomcat for development, but usually is not needed in production. + When running Tomcat on unixes, the console output is usually redirected + to a file named <code>catalina.out</code>. The name is configurable + using an environment variable. (See the startup scripts). + Whatever is written to <code>System.err/out</code> will be logged in + that file. That may include: + </p> + + <ul> + <li>Thread dumps, if you requested them via a system signal</li> + <li>Uncaught exceptions printed by <code>java.lang.ThreadGroup.uncaughtException(..)</code></li> + </ul> + + <p> + When running as a service on Windows, the console output is also caught + and redirected, but the file names are different. + </p> + + <p> + A related, but different feature is access logging. It can be configured + as a valve at the Context, or Host, or Engine. See <a href="config/valve.html">Valves</a> + documentation for more details. </p> </section> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org