cuiyi's blog(崔毅 crazycy)

记录点滴 鉴往事之得失 以资于发展
数据加载中……

让你的Tomcat5.5.*以上的版本如同Tomcat5.0.27版本一样,记录应用程序的日志

用Spring、Hibernate、Struts之类的开发框架时,往往应用在Web Application应用中。在应用中我们常常并不使用、起码在最开始开发时很少使用非常合理的异常也不用catch(Exception) catch(Throwable)之类的,因为稍有些矫枉过正之嫌。

那么界面(web页面)往往提示你产生了某些异常之流,或许已经足够供你解决问题;或许你还想知道的更详细;更甚是提示的错误让你丈二和尚摸不着头脑,怎么办呢?别忘记:Tomcat在logs目录中给你准备了十分充足的信息记录,有些时候真的让你欣喜不已。在我blog文章中已经详述并证实了这个事实。(http://www.blogjava.net/crazycy/archive/2006/07/07/57214.html)

既然Tomcat的日志功能这么强大,我突然弃用了Tomcat5.0.*系列(5.0.*系列的好处就是:既可以支持JDK1.4也可以支持JDK5.0。但是对5.0的支持需要配置,参考我blog文章http://www.blogjava.net/crazycy/archive/2006/05/31/49225.html  和http://www.blogjava.net/crazycy/archive/2006/06/03/50150.aspx)。

改用了Tomcat5.5之后,奇怪了,日志空空。在我的项目中我用的是改装的Tomcat5.0.28(JDK1.5.0_07),我的一个朋友用的是Tomcat5.5.12。在他遇到问题:Servlet action is not available  (http://www.blogjava.net/crazycy/archive/2006/07/07/57214.html 第1,2点)时,我陈述了我的解决方法,他似乎不很能接受,因而我让他把Tomcat的最新类似localhost.2006-07-16.log的文件发给我,结果我也傻眼了,空空如也,失去十足的论据,虽然确实解决了问题。

说了这么多无非想阐述2点:
1 Tomcat的log很有用,建议出了界面提示的不足以解决问题的错误时常察看;
2 Tomcat5.5版本以上的没有原先的log功能

那如何解决呢:apache给出了明确的方案:原来是为了给开发者更多的个人癖好的选择;比较人性化;但是委屈了我们这些新手;从这个事实也说明察看源网站声明的重要性。具体位置:http://tomcat.apache.org/tomcat-5.5-doc/logging.html
在这里引用一下:

Logging in Tomcat

Printer Friendly Version
print-friendly
version
Introduction

Tomcat 5.5 uses Commons Logging throughout its internal code allowing the developer to choose a logging configuration that suits their needs, e.g java.util.logging or Log4J. Commons Logging provides Tomcat the ability to log hierarchially across various log levels without needing to rely on a particular logging implementation.

An important consequence for Tomcat 5.5 is that the <Logger> element found in previous versions to create a localhost_log is no longer a valid nested element of <Context>. Instead, the default Tomcat configuration will use java.util.logging. If the developer wishes to collect detailed internal Tomcat logging (i.e what is happening within the Tomcat engine), then they should configure a logging system such as java.util.logging or log4j as detailed next.

log4j

Tomcat 5.5 has done away with localhost_log which you may be familiar with 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 stdout log.

If you need to setup cross-context detailed logging from within Tomcat's code, then you can use a simple log4j configuration. Note that this logging van be very verbose depending on the log level you chose to use. Note also that a log4j logging configuration is not going to produce stack trace type logging: those stack traces are output to stdout as discussed above.

Follow the following steps to setup a file named tomcat.log that has internal Tomcat logging output to it:

  1. Create a file called log4j.properties with the following content and save it into common/classes.
                log4j.rootLogger=debug, R 
                log4j.appender.R=org.apache.log4j.RollingFileAppender 
                log4j.appender.R.File=${catalina.home}/logs/tomcat.log 
                log4j.appender.R.MaxFileSize=10MB 
                log4j.appender.R.MaxBackupIndex=10 
                log4j.appender.R.layout=org.apache.log4j.PatternLayout 
                log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n 
                log4j.logger.org.apache.catalina=DEBUG, R
              
  2. Download Log4J (v1.2 or later) and place the log4j jar in $CATALINA_HOME/common/lib.
  3. Download Commons Logging and place the commons-logging.jar (not commons-logging-api.jar) in $CATALINA_HOME/common/lib with the log4j jar.
  4. Start Tomcat

This log4j configuration sets up a file called tomcat.log in your Tomcat logs folder with a maximum file size of 10MB and up to 10 backups. DEBUG level is specified which will result in the most verbose output from Tomcat.

You can (and should) be more picky about which packages to include in the logging. Tomcat 5.5 uses defines loggers by Engine and Host names. For example, for a default Catalina localhost log, add this to the end of the log4j.properties above. Note that there are known issues with using this naming convention (with square brackets) in log4j XML based configuration files, so we recommend you use a properties file as described until a future version of log4j allows this convention.

  • log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=DEBUG, R
  • log4j.logger.org.apache.catalina.core=DEBUG, R
  • log4j.logger.org.apache.catalina.session=DEBUG, R
Be warned a level of DEBUG will produce megabytes of logging and slow startup of Tomcat. This level should be used sparingly when debugging of internal Tomcat operations is required.

Your web applications should certainly use their own log4j configuration. This is valid with the above configuration. You would place a similar log4j.properties file in your web application's WEB-INF/classes folder, and log4j1.2.8.jar into WEB-INF/lib. Then specify your package level logging. This is a basic setup of log4j which does *not* require Commons-Logging, and you should consult the log4j documentation for more options. This page is intended only as a bootstrapping guide.


我用的依然是Log 4J,几点建议就是:
1
log4j.rootLogger=debug, R
log4j.logger.org.apache.catalina=DEBUG, R
中的debug, DEBUG根据你的记录级别调整,我喜欢用error ERROR
2
log4j.appender.R.File=${catalina.home}/logs/tomcat.log
这个地方不需要人为修改
3
建议在系统环境变量增加:CATALINA_HOME一项配置以下Tomcat的安装目录


最后就是希望遇到这个问题的朋友,能及时的看到这个文章或者从Tomcat网站上得到帮助,尽量减少这些问题上消耗过多时间和精力。把苦闷留给最开始遇到问题的人吧,然后大家充分share之。

posted on 2006-07-22 15:45 crazycy 阅读(2258) 评论(1)  编辑  收藏 所属分类: JavaEE技术

评论

# re: 让你的Tomcat5.5.*以上的版本如同Tomcat5.0.27版本一样,记录应用程序的日志  回复  更多评论   

这样配置得来的是一些内部处理细节的日志。如何记录console上显示的内容?
2007-06-13 15:35 | fbysss

只有注册用户登录后才能发表评论。


网站导航: