Tomcat7.X启动的日志,用的是自身的Log框架,既不是JDK也Log4j等组件的。它定义在{CATALINA_HOME}/bin/tomcat-juli.jar中。
之所以这样设计,可能是为了避免与WebApp中的日志框架产生冲突(因为一般webapp大多可能使用JDK或者Log4j的组件)。
启动Tomcat时,Tomcat自身所加载的classpath有:
- {CATALINA_HOME}/bin/bootstrap.jar --- 用于启动tomcat引擎
- {CATALINA_HOME}/bin/tomcat-juli.jar ---用于日志
- {JAVA_HOME}/jre/lib/*.jar ---加载java基础核心包
- {JAVA_HOME}/lib/tools.jar ---加载sun扩展工具包
其次,所有的WebApp都会加载一层classloder,位于{CATALINA_HOME}/lib,这里所包含的jar文件主要包含:
- J2EE规范标准中的一些接口,如EL规范el-api.jar, Servlet规范servlet-api.jar, Jsp规范jsp-api.jar, 注解规范annotations-api.jar
- Tomcat针对J2EE上述规范的具体实现包,比如catalina-*.jar, tomcat-*.jar
最后,每个独立的WebApp都会加载自己的应用层classloader,位于WebApp/WEB-INF/lib以及WebApp/WEB-INF/classes
通常会把jar文件放到lib目录,把应用的配置文件以及web层class文件(如Struts的Action类等)放到classes目录,因为这样才能够使得某些注解成功起效。
特别说明:某些组件的Log日志,直接使用的是JDK的日志组件,而不是采用Apache的common-logging组件来产生日志,因此,即使你正确的配置了Log4j组件,
这些日志的输出依然是JDK的日志格式。例如jersey实现的Restful组件,在搜索Restful service文件的时候,用的类是
com.sun.jersey.api.core.ScanningResourceConfig,它所采用的日志类是java.util.logging.Logger,所以日志的控制文件是logging.properties