- 论坛徽章:
- 1
|
原帖由 HonestQiao 于 2009-7-27 14:15 发表 ![]()
不错。
不过apache自己有split-logfile,或者可以用cronolog
我用的CentOS 5.3 系统里没有split-logfile,
另外cronolog只能按当前日期处理日志,它不分析日志内容
刚下了apache 2.2 的源码包,make了一下找到了split-logfile,原来是个perl脚本,去掉注释后代码如下
- #!/usr/bin/perl
- %is_open = ();
- while ($log_line = <STDIN>) {
- ($vhost) = split (/\s/, $log_line);
- $vhost = lc ($vhost) or "access";
- if ($vhost =~ m#[/\\]#) { $vhost = "access" }
- if (! $is_open{$vhost}) {
- open $vhost, ">>${vhost}.log"
- or die ("Can't open ${vhost}.log");
- $is_open{$vhost} = 1;
- }
- $log_line =~ s/^\S*\s+//;
- printf $vhost "%s", $log_line;
- }
- exit 0;
复制代码
基本和我的脚本类似,不知道我上面的bash脚本和这个perl脚本那个更快一些,于是做了一下测试
测试脚本test.sh
- #!/bin/sh
- s='xxx.yyy.ccc 192.168.200.21 - - [20/Jul/2009:13:55:50 +0800] "GET / HTTP/1.1" 200 51707'
- ii=0
- while [ "$ii" -lt 1000 ]
- do
- echo $s|$1
- ((ii++))
- done
复制代码
将三个脚本放到同一目录下
[root@test test]# time ./test.sh ./split-logfile
real 0m3.759s
user 0m1.489s
sys 0m2.293s
[root@test test]# time ./test.sh ./vlog.sh
real 0m2.515s
user 0m0.782s
sys 0m1.764s
竟然是bash脚本更快一些 |
|