一.关于tomcat的日志设计,采用了工厂模式,主要的类有下面几个:
org.apache.juli.logging包:
1》Log接口
对外提供的接口,用户使用LogFactory.getLog方法获取的日志对象的抽象。
2》LogFactory类
通过静态的getLog方法,向用户提供获取日志对象的接口
public static Log getLog(Class<?> clazz)
public static Log getLog(String name)
getLog方法内部调用DirectJDKLog.getInstance(name),来获取DirectJDKLog对象
LogFactory本身是singleton的。
private static LogFactory singleton=new LogFactory();
public static LogFactory getFactory() throws LogConfigurationException {
return singleton;
}
private LogFactory() {
logConfig=new Properties();
}
3》DirectJDKLog类
实现了Log接口,并且内部封装了java的Logger对象
对于Log接口的实现,内部调用的都是java的Logger对象的方法,比如:
@Override
public final boolean isErrorEnabled() {
return logger.isLoggable(Level.SEVERE);
}
二.日志配置文件
tomcat的日志配置文件是%CATALINA_BASE%\conf\logging.properties文件
在启动tomcat的时候,通过java的系统变量-Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties"来进行指定,如果不指定的话,会使用java的jre下的lib/logging.properties缺省配置文件。
其实tomcat并不直接使用这个配置文件,而是由java.util.logging.LogManager类来使用,tomcat的日志实现只是对java的日志实现进行了简单的封装,还有就是覆盖了java缺省的日志配置文件。
tomcat缺省情况下,只输出INFO级别以上的日志信息,如果想输出更详细的信息的话,需要手工修改conf\logging.properties文件,比如:
# 输出继承LifecycleBase类的每个子类的日志
org.apache.catalina.util.LifecycleBase.level = FINE
# 缺省的handler是控制台输出和catalina.yyyy-mm-dd.txt文件
.handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
# 缺省情况下,控制台输出格式采用简单格式,当然可以根据需要自己去修改
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter