日志是排错的重要信息来源,整日志我花了很多时间,最终的结果却不尽人意,但就这样吧,昨晚做梦还梦到处理日志。工作这一年出现了神经衰落,和本身的性格有关吧。。。
一.Tomcat原始处理日志的功能
Tomcat原始处理日志的代码在tomcat-juli.jar,这个jar包19K,它回去寻找${catalina.home}/conf/logging.properties,如果默认有4个日志文件,如果不需要这么多个文件则安需要选取,把红色标记的去除就少了localhost.log这个日志了
handlers = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler, 3manager.org.apache.juli.FileHandler, 4host-manager.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
.handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################
1catalina.org.apache.juli.FileHandler.level = FINE
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.
2localhost.org.apache.juli.FileHandler.level = FINE
2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.FileHandler.prefix = localhost.
3manager.org.apache.juli.FileHandler.level = FINE
3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
3manager.org.apache.juli.FileHandler.prefix = manager.
4host-manager.org.apache.juli.FileHandler.level = FINE
4host-manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
4host-manager.org.apache.juli.FileHandler.prefix = host-manager.
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.FileHandler
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.FileHandler
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.FileHandler
二.Tomcat处理日志升级
按照官方说法,同时它也说配置log4j.xml是有缺陷的。这个60K的tomcat-juli.jar的LogSource.java会检测到classpath是否存tomcat-juli-adapters.jar中的Log4JLogger.class,如果存在那就会使用Class.forName的方式将Log4j实例化,先去解析log4j.xml,找不到再去寻找log4j.properties,然后setLogImplementation("org.apache.juli.logging.impl.Log4JLogger")。按理来说,既然实现方式替换为Log4j了,那么Log4j应该能打印出所有的日志才对,但不是的,原始的catalina.log仍然打印出Log4j缺少的许多重要信息。好吧,也许是我方向错了,先把工作完成了,能用,细的方面后面再追究。
Follow the following steps to setup a file named tomcat.log that has internal Tomcat logging output to it:
- Create a file called log4j.properties with the following content and save it into $CATALINA_HOME/lib.
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
- Download Log4J (v1.2 or later) and place the log4j jar in $CATALINA_HOME/lib.
- Build or download the additional logging components. See the extras components documentation for details.
- Replace
$CATALINA_HOME/bin/tomcat-juli.jar
withoutput/extras/tomcat-juli.jar
. - Place
output/extras/tomcat-juli-adapters.jar
in $CATALINA_HOME/lib. - Start Tomcat
PS:log4j.xml默认放在${catalina.base}/home/lib下,但这样工程人员不好配置,在前文提到的监听器中添加一句:DOMConfigurator.configure(log4jfile); 可以解决这个问题