tomcat log的默认配置文件为conf\logging.properties,该文件的结构为
1)handlers 键定义了可用的日志处理器名称。
2).handlers 定义默认的日志处理器,默认输出到catalina.out和控制台,当tomcat以服务方式运行时,控制台的输出也定向到catalina.out 中,所以会有两份记录,冗余,在生产环境中可以将默认的fileHandler去掉,为什么不是去掉控制台处理器呢,因为项目的有些队员喜欢使用 System.out来输出某些信息。最典型的为:
try{
//.....
}catch (Exception exception) {
exception.printStackTrace();
}
该代码将日志打印到了System.err。
3)接下来的行类似于log4j的各个日志处理器的配置,该日志的等级(level),日志位置(directory),日志文件的前缀(prefix)
4)以org.apache.catalina.core.ContainerBase开始的行类似log4j.logger行,配置具体的规则,各种情况应该分别写到哪些文件中,格式为
1 |
org.apache.catalina.core.ContainerBase.[${engine}].[${host}].[${context}] |
tomcat默认的引擎为Catalina,host为localhost,所以前缀都是org.apache.catalina.core.ContainerBase.[Catalina].[localhost]
默认的规则为,"/manager"上下文(Context,也就是路径)的日志写入前缀为manager的日志文件,上下文为"host-manager"的日志写入前缀为host-manager的日志文件,其他的日志文件写入localhost文件中
5) 默认还会产生一个文件名格式为localhost_access_log.yyyy-MM-dd.txt的文件,记录访问的url请求,这个是通过 server.xml的<Host>下的<Valve>节点定义的,如果不需要直接注释掉<Valve>的定义就可 以了,
6)如果你需要对某个上下文(比如testoom)指定一个单独的日志文件,实现很简单
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/testoom].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/testoom].handlers = 5testoom.org.apache.juli.FileHandler
7) 调用javax.servlet.ServletContext.log(...)打印的log会进入 org.apache.catalina.core.ContainerBase.[${engine}].[${host}]. [${context}]对应的 日志文件中。
结束语:
掌握了tomcat的日志的默认配置,我再也不用担心那些我没有捕获的异常了。
Comments are closed.