- 論壇徽章:
- 1
|
原帖由 HonestQiao 于 2009-7-27 14:15 發(fā)表 ![]()
不錯(cuò)。
不過apache自己有split-logfile,或者可以用cronolog
我用的CentOS 5.3 系統(tǒng)里沒有split-logfile,
另外cronolog只能按當(dāng)前日期處理日志,它不分析日志內(nèi)容
剛下了apache 2.2 的源碼包,make了一下找到了split-logfile,原來是個(gè)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;
復(fù)制代碼
基本和我的腳本類似,不知道我上面的bash腳本和這個(gè)perl腳本那個(gè)更快一些,于是做了一下測試
測試腳本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
復(fù)制代碼
將三個(gè)腳本放到同一目錄下
[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腳本更快一些 |
|