随笔-52  评论-152  文章-0  trackbacks-1

Recipe4.10 apache log分析程序

通过前面的几节,现在看一个实例:apache的日志分析程序。以我本机的apache log为例,如下:
192.168.1.138 - - [03/Feb/2006:01:40:20 +0800] "GET /phpinfo.php HTTP/1.1" 404 295
//分别为 客户端IP、访问日期、请求路径、服务端响应Code、请求文件大小

其正则表达式为:
^([\d.]+) (\S+) (\S+) \[([\w:/]+\s[+\-]\d{4})\] "(.+?)" (\d{3}) (\d+)

想到前面正则中()的作用了么?可以通过group(i)快速的将每组()中类容提取出来。
第一组([\d.]+):将IP地址匹配出来
第四组([\w:/]+\s[+\-]\d{4}):将时间匹配出来
第五组"(.+?)":将客户端请求内容匹配出来
第六组(\d{3}):将服务端响应Code匹配出来
第七组(\d+):将文件大小匹配出来

关于那些正则表达式元字符的语法详见:
http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html

测试程序:

    public static void main(String[] args) {
        
        String pattern 
= "^([\\d.]+) (\\S+) (\\S+) \\[([\\w:/]+\\s[+\\-]\\d{4})\\] \"(.+?)\" (\\d{3}) (\\d+)";
        String log 
= "192.168.1.138 - - [03/Feb/2006:01:40:20 +0800] \"GET /phpinfo.php HTTP/1.1\" 404 295";
        
        System.out.println(
"pattern: " + pattern);
        System.out.println(
"log: " + log);
        
        Pattern p 
= Pattern.compile(pattern);
        Matcher m 
= p.matcher(log);
        
        
if (m.find()) {
            System.out.println(
"IP Address: " + m.group(1));
            System.out.println(
"Date&Time: " + m.group(4));
            System.out.println(
"Request: " + m.group(5));
            System.out.println(
"Response: " + m.group(6));
            System.out.println(
"Size: " + m.group(7));
        }
 else {
            System.out.println(
"error!");
        }

    }


    
/* 
    程序输出:
    pattern: ^([\d.]+) (\S+) (\S+) \[([\w:/]+\s[+\-]\d{4})\] "(.+?)" (\d{3}) (\d+)
    log: 192.168.1.138 - - [03/Feb/2006:01:40:20 +0800] "GET /phpinfo.php HTTP/1.1" 404 295
    IP Address: 192.168.1.138
    Date&Time: 03/Feb/2006:01:40:20 +0800
    Request: GET /phpinfo.php HTTP/1.1
    Response: 404
    Size: 295
    
*/
posted on 2006-02-07 21:14 HexUzHoNG 阅读(541) 评论(2)  编辑  收藏 所属分类: JAVA

评论:
# 5205 2008-06-01 01:20 | 5205
# re: Recipe 4.10 Program: Apache Logfile Parsing 2008-06-13 09:56 | nike shoes

专题:Android  iPad  jQuery  Chrome OS

博客园首页  IT新闻  知识库  学英语  Java程序员招聘
标题  
姓名  
主页
验证码 *  
内容(请不要发表任何与政治相关的内容)  
  登录      
每天10分钟,轻松学英语


网站导航: