就我们自己的框架而言,每一次操作都会经过Controller(一个),而Controller会调用服务Service(可能有多个),每一次的请求情况和调用Service的情况都记录再日志文件中。通过解析日志文件,可以发现系统中耗时的业务以及常出错的业务等。
日志文件localhost_access_log通过server.xml文件配置,每一行格式主要通过
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log." suffix=".txt"/> 中的pattern属性配置:
%a - 远端IP地址 %A - 本地IP地址 %b - 发送的字节数,不包括HTTP头,如果为0,使用"-" %B - 发送的字节数,不包括HTTP头 %h - 远端主机名(如果resolveHost=false,远端的IP地址) %H - 请求协议 %l - 从identd返回的远端逻辑用户名(总是返回 '-') %m - 请求的方法(GET,POST,等) %p - 收到请求的本地端口号 %q - 查询字符串(如果存在,以 '?'开始) %r - 请求的第一行,包含了请求的方法和URI %s - 响应的状态码 %S - 用户的session ID %t - 日志和时间,使用通常的Log格式 %u - 认证以后的远端用户(如果存在的话,否则为'-') %U - 请求的URI路径 %v - 本地服务器的名称 %D - 处理请求的时间,以毫秒为单位 %T - 处理请求的时间,以秒为单位
要分析性能,我们需要知道 请求时间、请求路径(可作名称)、请求状态码、发送字节数、请求时长。
那么可配置pattern为:"%h %t "%r" %s %b %T"。
其中,“"”表示一个英文引号。
第一步:筛选有效的数据行
对于Controller,请求路径以"/jyglFront"开头但不以"/jyglFront/mainView/navigate"开头。
对于Service,请求路径以"/jygl/jaxrs"开头。
第二步:对有效数据行进行处理解析,解析之前需要对log格式的时间进行处理,若不好处理,可将其替换为日志文件名中的时间。