Tomcat原理学习---日志系统

日志系统是一个记录信息的组件。在Catalina中,日志系统是一个相对简单的跟容器相关联的组件。
本章有三节组成:
第一节介绍了org.apache.catalina.Logger接口,该接口是所有的日志系统都要实现的。
第二节介绍了Tomcat中的日志系统
第三节详细讲解了本章的例子,该例子基于Tomcat的日志系统。 


Logger接口:
日志接口提供了日志系统要实现的方法,最简单的方法是接受一个字符串并将其记录, 
最后两个方法会接受一个冗余级别(verbosity level),如果传递的数字低于该类的实例设置的冗余级别,就将信息记录下来,否则就忽略信息。
使用静态变量定义了五个冗余级别:FATAL, ERROR, WARNING, INFORMATION,和 DEBUG。
getVerbosity和setVerbosity分别用来获得和设置冗余级别。
另外,日志接口还有getContainer 和 setContainer方法用来将日志系统跟容器关联起来。还有addPropertyChangeListener和removePropertyChangeListener方法删除和添加PropertyChangeListener。


Tomcat日志系统:
Tomcat提供了三种日志系统,它们分别是FileLogger, SystemErrLogger, 和 SystemOutLogger。
这些类可以在org.apache.catalina.logger包中找到,它们都继承了org.apache.catalina.logger.LoggerBase类。
LoggerBase类:
在Tomcat 4中,LoggerBase类是一个抽象类,它实现了Logger接口中除log(String msg)之外的所有方法。 
冗余级别可以使用setVerbosity方法改变,传递这些字符串给方法即可FATAL, ERROR, WARNING, INFORMATION, 或 DEBUG。
SystemOutLogger类:
SystemOutLogger作为LoggerBase的子类提供了log(String message)方法的实现。每一个收到的信息都被传递给System.out.println方法。
SystemErrLogger类:
SystemErrLogger类跟SystemOutLogger类十分相似,只是它覆盖log(String message)方法的时候使用的是System.erro.println()方法。
FileLogger 类 :
FileLogger是LoggerBase类中最复杂的。它将从关联容器收到的信息写到文件中,每个信息可以选择性的加上时间戳。在第一次实例化的时候,该类的实例会创建一个文件,该文件的名字带有日期信息。如果日期改变了,它会创建一个新的文件并把信息写在里面。类的实例允许在日志文件的名字上添加前缀和后缀。
FileLogger类中最重要的方法是log方法:
log方法接受一个消息并把消息写到日志文件中。在FileLogger实例的生命周期中,log方法可以打开或关闭多个日志文件。如果日期改变了的话,log方法关闭当前文件并打开一个新文件。接下来看看 open、close和log这些方法是如何工作的。 
open 方法 :
open方法在指定目录中创建一个新日志文件。
close方法:
Close方法清空PrintWriter变量writer,然后关闭PrintWriter并将writer设置为null,并将date设置为空字符串。
log方法:
Log方法首先创建一个java.sql.Timestamp类的实例,该类是java.util.Date的瘦包装器 (thin wrapper)
初始化时间戳的目的是更容易的得到当前时间。
在该方法中,将当前时间的long格式传递给Timestamp类并构建Timestamp类实例。 
 Timestamp ts = new Timestamp(System.currentTimeMillis()); 
使用Timestamp类的toString方法,可以得到当前时间的字符串表示形式,字符串输出的形式如下格式: 
yyyy-mm-dd hh:mm: SS.fffffffff
在方法中使用subString方法得到日期和小时。
  String tsString = ts.toString().substring(0, 19);
      String tsDate = tsString.substring(0, 10); 
   接下来log方法比较tsData和String变量date的值,如果tsDate 和date的值不同,它关闭当前日志文件,将tsDate的值赋给date并打开一个新日志文件。   
   最后,日志方法将PrintWriter实例的输出流写入到日志文件中。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值