Tomcat 7源码学习笔记 -11 日志输出

一.关于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
 

你可能感兴趣的:(log,LogFactory,Logger,DirectJDKLog)