2012-11-13 10 views
2

我正在做一個任務,我需要解析一個日誌文件並根據所述日誌文件創建一個網站。其中一項規定是,我數着發生在昨天的命中數,當談到這個香港專業教育學院附我的代碼和日誌文件的IM與希望有人能提供一些建議工作IM丟失,感謝perl計數昨天在日誌文件中點擊

#!/usr/bin/perl 
use strict; 
use warnings; 
use Time::Piece; 
use Time::Seconds qw(ONE_DAY); 


my $yesterday = localtime() - ONE_DAY(); 
print $yesterday; 




open(LOGFILE,"<", "access.log")or die"Could not open log file."; 
my $yesterdayHits=0; 

my $totalhits=0; 
my $webPage='log.html'; 

open(WEBPAGE,">",$webPage); 
print WEBPAGE ("<HEAD><TITLE>Access Counts</TITLE></HEAD>"); 
print WEBPAGE ("<BODY>"); 
print WEBPAGE ("<H1> today is: ",scalar(localtime), "</H1>"); 
print WEBPAGE ("<h3>Yesterday was $yesterday</h3>"); 
print WEBPAGE ("<TABLE BORDER=1 CELLPADDING=10 width='500px'>"); 

foreach my $line (<LOGFILE>) { 
    $totalhits++; 
    my $w = "(.+?)"; 
    $line =~ m/^$w $w $w \[$w:$w $w\] "$w $w $w" $w $w/; 

    my $site  = $1; 
    my $logName = $2; 
    my $fullName = $3; 
    my $date  = $4; 
    my $time  = $5; 
    my $gmt  = $6; 
    my $req  = $7; 
    my $file  = $8; 
    my $proto = $9; 
    my $status = $10; 
    my $length = $11; 
    #if($line =~ m/$yesterday/){$yesterdayHits++} 


print WEBPAGE ("<Tr><TD>$site</TD><TD>$line</TD></Tr>\n\n"); 


} 



close(LOGFILE); 
print WEBPAGE ("<h2>Total hits: $totalhits</h2>"); 
print WEBPAGE ("<h3>Hits Yesterday: $yesterdayHits</h3>"); 
print WEBPAGE ("</TABLE></P>"); 
print WEBPAGE ("</BODY></HTML>"); 
close(WEBPAGE); 

訪問日誌

66.249.65.107 - - [11/Nov/2012:19:33:01 -0400] "GET /support.html HTTP/1.1" 200 11179 
111.111.111.111 - - [11/Nov/2012:19:33:01 -0400] "GET/HTTP/1.1" 200 10801 
111.111.111.111 - - [08/Oct/2007:11:17:55 -0400] "GET /style.css HTTP/1.1" 200 3225 
123.123.123.123 - - [26/Apr/2000:00:23:48 -0400] "GET /pics/wpaper.gif HTTP/1.0" 200 6248 
123.123.123.123 - - [26/Apr/2000:00:23:40 -0400] "GET /asctortf/ HTTP/1.0" 200 8130 
123.123.123.123 - - [26/Apr/2000:00:23:48 -0400] "GET /pics/5star2000.gif HTTP/1.0" 200 4005 
123.123.123.123 - - [26/Apr/2000:00:23:50 -0400] "GET /pics/5star.gif HTTP/1.0" 200 1031 
123.123.123.123 - - [26/Apr/2000:00:23:51 -0400] "GET /pics/a2hlogo.jpg HTTP/1.0" 200 4282 
123.123.123.123 - - [26/Apr/2000:00:23:51 -0400] "GET /cgi-bin/newcount?jafsof3&width=4&font=digital&noshow HTTP/1.0" 200 36 
172.16.130.42 - - [26/Apr/2000:00:00:12 -0400] "GET /contacts.html HTTP/1.0" 200 4595 
10.0.1.3 - - [26/Apr/2000:00:17:19 -0400] "GET /news/news.html HTTP/1.0" 200 16716 
129.21.109.81 - - [26/Apr/2000:00:16:12 -0400] "GET /download/windows/asctab31.zip HTTP/1.0" 200 1540096 
192.168.198.92 - - [22/Dec/2002:23:08:37 -0400] "GET/HTTP/1.1" 200 6394 
192.168.198.92 - - [22/Dec/2002:23:08:38 -0400] "GET /images/logo.gif HTTP/1.1" 200 807 
192.168.72.177 - - [22/Dec/2002:23:32:14 -0400] "GET /news/sports.html HTTP/1.1" 200 3500 
192.168.72.177 - - [22/Dec/2002:23:32:14 -0400] "GET /favicon.ico HTTP/1.1" 404 1997 
192.168.72.177 - - [04/Nov/2012:23:32:15 -0400] "GET /style.css HTTP/1.1" 200 4138 
192.168.72.177 - - [22/Dec/2002:23:32:16 -0400] "GET /js/ads.js HTTP/1.1" 200 10229 
192.168.72.177 - - [22/Dec/2002:23:32:19 -0400] "GET /search.php HTTP/1.1" 400 1997 
127.0.0.1 - - [10/Apr/2007:10:39:11 +0300] "GET/HTTP/1.1" 500 606 
127.0.0.1 - - [10/Apr/2007:10:39:11 +0300] "GET /favicon.ico HTTP/1.1" 200 766 
139.12.0.2 - - [10/Apr/2007:10:40:54 +0300] "GET/HTTP/1.1" 500 612 
139.12.0.2 - - [10/Apr/2007:10:40:54 +0300] "GET /favicon.ico HTTP/1.1" 200 766 
127.0.0.1 - - [10/Apr/2007:10:53:10 +0300] "GET/HTTP/1.1" 500 612 
127.0.0.1 - - [10/Apr/2007:10:54:08 +0300] "GET/HTTP/1.0" 200 3700 
127.0.0.1 - - [10/Apr/2007:10:54:08 +0300] "GET /style.css HTTP/1.1" 200 614 
127.0.0.1 - - [10/Apr/2007:10:54:08 +0300] "GET /img/pti-round.jpg HTTP/1.1" 200 17524 
127.0.0.1 - - [10/Apr/2007:10:54:21 +0300] "GET /unix_sysadmin.html HTTP/1.1" 200 3880 
217.0.22.3 - - [04/Nov/2012:10:54:51 +0300] "GET/HTTP/1.1" 200 34 
217.0.22.3 - - [10/Apr/2007:10:54:51 +0300] "GET /favicon.ico HTTP/1.1" 200 11514 
217.0.22.3 - - [10/Apr/2007:10:54:53 +0300] "GET /cgi/pti.pl HTTP/1.1" 500 617 
127.0.0.1 - - [10/Apr/2007:10:54:08 +0300] "GET/HTTP/0.9" 200 3700 
217.0.22.3 - - [10/Apr/2007:10:58:27 +0300] "GET/HTTP/1.1" 200 3700 
217.0.22.3 - - [10/Apr/2007:10:58:34 +0300] "GET /unix_sysadmin.html HTTP/1.1" 200 3880 
217.0.22.3 - - [10/Apr/2007:10:58:45 +0300] "GET /talks/Fundamentals/read-excel-file.html HTTP/1.1" 404 311 

回答

1
use POSIX; 

$yesterday = strftime("%d/%b/%Y",localtime(time()-86400)); 

$昨日現在包含昨天的日誌文件的格式(例如 「11 /月/ 2012」)日期。您可以通過檢查$line =~ /$yesterday/;

http://perldoc.perl.org/POSIX.html

+0

可能有問題,因爲時區從-0400變化到+0300的例子訪問日誌過濾行。 – creaktive

0

一個基本的方法是修改$yesterday變量(是相同的日誌文件)是這樣的:

$yesterday =~ s!\w+\s+(\w+)\s+(\d+)\s+\d{2}:\d{2}:\d{2}\s+(\d+)!$2/$1/$3!; 

現在你可以去COMM並改變線

if ($date eq $yesterday) { $yesterdayHits++ } 

開始計數。

0

不是很快,但非常精確的版本;使用UNIX時間戳:

#!/usr/bin/env perl 
use strict; 
use warnings 'all'; 

use HTTP::Date; 
while (<>) { 
    my $stamp; 
    print if 
     m{\s+\[(.+?)\]\s+\"}x 
     and $stamp = str2time($1) 
     and $stamp > time - 86_400 * 2 
     and $stamp < time - 86_400; 
}