Tomcat源码分析-AccessLogValve类

类概况

Tomcat的server.xml中,Host节点的子元素名称是Valve,用来定义一系列的处理器,AccessLogValve就是用来记录容器访问请求的日志处理类。Valve,本意是阀门的意思,AccessLogValve是处理生成访问日志的,梳理它的类图如下:

这里写图片描述
它的所有的成员变量大多都跟日志文件写入操作有关。

使用方法

tomcate的默认配置为:

 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log." suffix=".txt"/>

xml节点可以添加任意该类的属性,而且它的所有属性都是有默认值的,例如renameOnRotate是false,即每天产生的日志文件都是以日期为后缀的。
renameOnRotate为true的情况下,当天的日志文件是没有日期后缀的,就是localhost_access_log.txt,每天日期切换时,当天文件重命名为前一天日期后缀,同时新生成当天文件。

主要流程

这个类是LifecycleMBeanBase的子类,所以它是随着容器一起启动的,它的startInternal承担着创建日志文件的责任,它的log操作是记录请求日志的,同时先执行rotate操作,判断是否需要生成新日志文件。主要方法有open,close,rotate和close。
open和close流程图如下:

这里写图片描述

rotate和close流程图如下:

这里写图片描述

启示录

主要就是根据当前日期和记录的dateStamp进行比对,如果日期发生变化,就生成新的日志文件。这个类的renameOnRotate属性决定了日志文件的存在形式是单一的日期后缀的日志呢,还是历史日志以日期结尾,当前日志没有日期后缀。
而renameOnRotate属性为true的使用方式,它的表现形式跟log4j的org.apache.log4j.DailyRollingFileAppender类的日志处理方式一样,即当前和历史日志文件名的格式不一样。当然,这是我观察tomcat日志时发现的,推断DailyRollingFileAppender的实现方式应该跟这个类差不多,哪天再去验证一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值