Tomcat 使用 Log4j 输出详细系统日志信息,快速诊断启动故障

SEG的命名空间 2011-10-03

Tomcat 启动时的系统日志默认是由 JdkLog14Logger 打印出来的,如

2008-7-711:19:34org.apache.catalina.core.StandardEnginestart

信息:StartingServletEngine:ApacheTomcat/5.0.28

2008-7-711:19:34org.apache.catalina.core.StandardHoststart

信息:XMLvalidationdisabled

2008-7-711:19:34org.apache.catalina.core.StandardHostgetDeployer

信息:CreateHostdeployerfordirectdeployment(non-jmx)

那我们能不能用Log4J来输出这种系统日志呢?我们知道像Apache那样的大部分开源框架、组件都是用通用日志组件(commons-logging)来输出日志的,因此如果把commons-logging和log4j搭配使用就能输出十分详尽的日志信息。

尤其是碰到Tomcat几乎能令人抓狂的ErrorfilterStart,如控制台下得到如下信息:

2007-3-1317:43:46org.apache.catalina.core.StandardContextstart

严重:ErrorfilterStart

2007-3-1317:43:46org.apache.catalina.core.StandardContextstart

严重:Contextstartupfailedduetopreviouserrors

而茫然不知所措时,免不了会胡乱猜测,更容易使你的注意力集中在所有的filter本身上,其实有些冤枉filter了。至少网上针对这个问题有许多不明确的解,有配置文件问题的,有缺类少包的问题等,不一定能和你的实际问题对上号。

其实大可不必受如此之周折,解铃仍需寄铃人吗,由Tomcat给你落下的结,当然要Tomcat告诉你是怎么回事。很多人在自己的应用中会安放一个日志文件,却可能忽略掉Tomcat自身的日志文件,在logs目录下的localhost_log.yyyy-MM-dd.txt就事,记住只要碰到关于Tomcat本身启动的问题,查看其中当前的日志信息的话,问题就会坦荡荡荡显露在你的前面,基本也就能迎刃而解了。

前面讲过,commons-logging+log4j可以输出极详尽的信息,那现在就来说说如何配置。很多人开发过程中是通过MyEclipse来启动Tomcat的,所有这里包括两种方法,分别介绍如下:

1.MyEclipse启动Tomcat使用Log4j输出日志信息的配置

在MyEclipse的Tomcat服务器配置中的Prependtoclasspath或者Appendtoclasspath中加入

commons-logging-1.1.jar

log4j-1.2.13.jar

以及log4j.properties所在目录,如D:\Tomcat\Tomcat5.0.28-Test\bin

如图:

我是把commons-logging-1.1.jar、log4j-1.2.13.jar和log4j.properties都放在%TOMCAT_HOME%\bin目录下的,当然你也可以放在别处。

完了之后,通过MyEclipse启动Tomcat时就能看到让你眼花花的日志滚屏,请根据实际需要在log4j.properties中屏蔽你不想关注的内容。所以像这种日志信息最好是记录在文件中,屏幕的缓冲区是有限且耗内存的。真正需要的时候你就可以从这个日志文件里读懂Tomcat的启动全过程。

如果你明白commons-logging.properties的功用,你也可以把这个文件放在与log4j.properties所在的目录下,可在其中指定其他log实现类,详见commons-logging.properties文件的内容。

2.startup.bat启动Tomcat使用Log4j输出日志信息的配置

按前面推荐的做法,把commons-logging-1.1.jar、log4j-1.2.13.jar和log4j.properties都放在%TOMCAT_HOME%\bin目录下,然后修改catalina.bat文件,找到

setCLASSPATH=%CLASSPATH%;%CATALINA_HOME%\bin\bootstrap.jar

行,在其后附上这两个包和log4j.properties所在目录到classpath上,修改后就是:

setCLASSPATH=%CLASSPATH%;%CATALINA_HOME%\bin\bootstrap.jar;%CATALINA_HOME%\bin\commons-logging-1.1.jar;%CATALINA_HOME%\bin\log4j-1.2.13.jar;%CATALINA_HOME%\bin

保存,通过startup.bat启动就会用log4j来输出启动日志了,其他平台下的Tomcat,请参照平台特性修改catalina.sh吧。

同样,你也可以应用commons-logging.properties指定其他的log实现,因为Log4j是它的默认实现,所以可省去。

用Log4j输出的启动日志形式如下:

15:36:37,859org.apache.catalina.startup.Embedded.initNaming(Embedded.java:922)-Settingnamingprefix=org.apache.naming

15:36:38,046org.apache.catalina.startup.Catalina.createStartDigester(Catalina.java:350)-Digesterforserver.xmlcreated171

15:36:38,218org.apache.catalina.core.NamingContextListener.<init>(NamingContextListener.java:83)-newNamingContextListener

许多你希望深入了解的内部细节都可以通过这样一份日志追踪到。

附上这两个属性文件的:log4j.properties和commons-logging.properties。

log4j.properties

viewsourceprint?01.log4j.rootLogger=DEBUG,stdout,file

02.

03.##directlogmessagestostdout###

04.log4j.appender.stdout=org.apache.log4j.ConsoleAppender

05.log4j.appender.stdout.Target=System.out

06.log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

07.log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE}%l-%m%n

08.

09.##directmessagestofileSystemOut.log###

10.log4j.appender.file=org.apache.log4j.FileAppender

11.log4j.appender.file.File=../logs/SystemOut.log

12.log4j.appender.file.Append=false

13.log4j.appender.file.layout=org.apache.log4j.PatternLayout

14.log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE}%l-%m%n

15.

16.##blockpackagesthatyoudon'tcareabout###

17.log4j.logger.org.apache.commons.digester=ERROR

18.log4j.logger.org.apache.commons.beanutils=ERROR

19.log4j.logger.org.apache.commons.modeler=ERROR

commons-logging.properties

viewsourceprint?1.org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger

2.

3.#PleaserefertotheLogimplementationsinpackageorg.apache.commons.logging.impl#

4.#org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger

5.#org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog

转载自:http://hi.baidu.com/thedawn0201/blog/item/df65b166651758c7e7113a8d.html

相关推荐