[Perl] Apache 转 IIS 的 Perl
转载本站文章请注明,转载自:扶凯[http://www.php-oa.com]
本文链接: http://www.php-oa.com/2010/09/01/squid-to-iis-convert-perl.html
小软件,给 apache 转成 IIS 的格式的 Perl
#!/usr/bin/perl
use strict;
use POSIX;
my $PerlParsingFormat = '^([^ ]+)\s+([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) (\w+) ([^ ]+) (.+?) ([^ ]+) ([^ ]+) "([^ ]+)" "(.*?)" ([^ ]+)';
$PerlParsingFormat = qr/$PerlParsingFormat/;
while ( my $line = <> ) {
chomp $line;
$line =~ s/\r$//;
my @field = map( /$PerlParsingFormat/, $line );
my ($date, $Response_time, $Client_source_IP, $HTTP_status_code, $Reply_size, $Request_method, $Request_URL, $User_name, $Client_FQDN, $MIME, $Referer, $User_Agent, $Cookie ) = @field;
$date = strftime("%Y-%m-%d %H:%M:%S", localtime($date));
my $c_ip = $Client_source_IP || "-";
my $cs_username = $User_name || '-';
my $cs_method = $Request_method;
my $sc_bytes = $Reply_size;
my $cs_User_Agent = $User_Agent;
my $cs_Referer = $Referer;
my $cs_Cookie = $Cookie;
my $sc_status = $HTTP_status_code;
$sc_status =~ s/.*\///;
my $s_ip = $Client_FQDN || '-';
$s_ip =~ s/.*\///;
# 对 UserAgent 中的空格换成+
$cs_User_Agent =~ s/\ /\+/g;
# 对 url 进行处理
my $cs_uri_stem = $Request_URL;
my $cs_uri_query= '-';
if ( $Request_URL ne "-" ){
if ( $Request_URL =~ /(.*)\?(.*)/s ){
$cs_uri_stem = $1;
$cs_uri_query = $2;
}
}
# 打印成 IIS 的日志格式
#Fields: date time s-sitename s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip
#cs(User-Agent) cs(Cookie) cs(Referer) sc-status sc-substatus sc-win32-status sc-bytes cs-bytes
print "$date - $s_ip $cs_method $cs_uri_stem $cs_uri_query 80 $cs_username $c_ip $cs_User_Agent $cs_Cookie $cs_Referer $sc_status 0 - $sc_bytes -\n";
}



















谢啦,找了很久
可能还要小小的修改,没测试的,别人需要,随手写了一个