Tomcat 6.0 日志处理

本文主要讲的是 Tomcat 自己本身对日志的处理,而非每个 webapp 的日志配置(现在 webapp 一般会独立配置日志)。

内容基本上来自官方文档:http://tomcat.apache.org/tomcat-6.0-doc/logging.html

 

一、Webapp 记录日志的方法

Tomcat 中的 webapp 有三种方法记录日志:

  • 使用 java.util.logging
  • 使用 Servlet 标准中的日志记录方法 javax.servlet.ServletContext.log(...)
  • 使用任意其它的日志框架(例如 Log4j)

一般来说,每个 webapp 使用的日志框架都是独立的,不会影响其他 webapp。但如果用的是 Java 原生的 java.util.logging,由于它是通过系统加载的,因此各个 webapp 之间会共享同一个日志配置。

 

二、什么是 JULI

Tomcat 默认会使用 java.util.logging (JUL) 日志框架,但重写了一些实现,以解决一个 JVM 中 JUL 只能使用一个配置文件的问题,满足多个 webapp 独立配置日志的需求。这个实现就叫 JULI (['dʒu:li])。Jar包为${catalina.base}/bin/tomcat-juli.jar

 

全局日志配置

  • 默认使用 ${catalina.base}/conf/logging.properties,这个路径在 Tomcat 启动脚本中通过 java.util.logging.config.file 系统属性指定
  • 如果上述默认配置文件不可用(不存在或无权限读取),则使用 JRE 中的 ${java.home}/lib/logging.properties

webapp 独立日志配置

JULI 支持每个 ClassLoader (也就是每个 webapp) 使用自己的日志配置。将配置文件${catalina.base}/conf/logging.properties复制到 {webapp}/WEB-INF/classes目录下,然后修改日志输出文件的路径或者文件名的前缀,以区别于全局日志输出文件:

1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/webapps/{webapp}/WEB-INF/classes/logs

1catalina.org.apache.juli.FileHandler.prefix = catalina.

或者

1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs

1catalina.org.apache.juli.FileHandler.prefix = {webapp}.


控制台

  • 在 Linux 上运行 Tomcat 时,控制台的输出 (System.err/out) 同时会被保存到文件 catalina.out 中,这个名称是通过运行脚本指定的
  • 在 Windows 上,如果以服务的形式运行 Tomcat,也会将控制台输出保存到文件(Tomcat6保存到tomcat6-stdout.yyyy-MM-dd.log中),如果不以服务的形式运行,则不会保存控制台输出

三、JULI 对 JUL 的扩展

  • 配置文件中能通过 ${systemPropertyName} 的格式使用系统属性
  • Handler
    • JUL 中,handler 名称即为类的完整限定名,一个类只能创建一个 handler。而 JULI 的 handler 名称可以在类的完整限定名之前加前缀,该前缀以数字开头,以 . 结尾(注意中间不能出现 .),例如 5portallocal.
    • JULI 定义一些 handler 类,例如 org.apache.juli.FileHandler,支持缓冲。
  • Logger
    • 每个 logger 可以指定多个 handler(Java 6 的 JUL 开始支持)
    • root logger 可以使用 .handler 指定 handler:
      • org.apache.catalina.core.ContainerBase.[Catalina].[localhost].useParentHandlers = true 
    • 注意,如果一个 logger 已经指定了 handler,则默认不会将日志传递给上级 logger,但可以通过 useParentHandlers 修改
      • org.apache.catalina.core.ContainerBase.[Catalina].[localhost].useParentHandlers = true

四、异常(Exception)信息如何记录

1.被程序处理的异常:
try {
	throw new IOException("IO错误");
} catch (IOException e) {
	e.printStackTrace();
}
跟标准输出的处理方式一样。在Linux中,异常信息会保存到catalina.out中;在Windows中,如果以服务的形式运行Tomcat,异常信息会保存到tomcat6-stdout.yyyy-MM-dd.log(Tomcat6)中,否则打印到控制台。

2.未被程序处理而最后交给Tomcat处理的异常,其异常信息会保存到localhost.yyyy-MM-dd.log中。

五、生产环境中的注意事项

  • root logger 默认配置了 FileHandler 和 ConsoleHandler,而控制台输出一般又被保存到文件中,导致相同的日志被保存了2份,可以考虑将 ConsoleHandler 从 root logger 中去除。
  • 删除没必要的 handler,例如 host-manager 的。
  • handler 默认使用系统默认编码,可以考虑显式指定编码。
  • 考虑配置 access log,可参考 http://tomcat.apache.org/tomcat-6.0-doc/config/valve.html#Access_Log_Valve

六、其它

Tomcat 也能配置为使用 Log4j 代替 JULI 来处理日志,详见 http://tomcat.apache.org/tomcat-6.0-doc/logging.html#Using_Log4j





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值