|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Nikolay Pichtin 2:5056/30 11 Jan 2004 21:43:12 To : All Subject : Apache log --------------------------------------------------------------------------------
Вот сделал скрипт, создающий лог в стиле Apache combined
Hо только не понял, как можно получить код ответа сервера
#!/usr/bin/perl -w
use strict;
my $use_flock = 0;
print qq~Content-type: text/html; charset=windows-1251\n\n~;
my $host = $ENV{'SERVER_NAME'};
my $env = $ENV{'REMOTE_ADDR'};
$env = $ENV{'HTTP_X_FORWARDED_FOR'} unless $env;
$env = $ENV{'HTTP_VIA'} unless $env;
my $refer = $ENV{'HTTP_REFERER'};
$refer = "-" unless $refer;
my $remoteuser = $ENV{'REMOTE_USER'};
$remoteuser = "-" unless $remoteuser;
my $uri = $ENV{'DOCUMENT_URI'};
$uri = $ENV{'REQUEST_URI'} unless $uri;
my $method = $ENV{'REQUEST_METHOD'} . " " . $uri;
$method = "-" unless $method;
my $len = $ENV{'REQUEST_URI'};
$len =~ s/(.*)\/(.*)/$2/;
my $tt = $1;
$len =~ s/^(.*)$/..\/$1/ unless $tt;
$len = (stat("$len"))[7];
$len = "-" unless $len;
my $agent = qq~"$ENV{'HTTP_USER_AGENT'}"~;
$agent = "-" unless $agent;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
my @months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
$sec = sprintf("%02d",$sec); $min = sprintf("%02d",$min); $hour =
sprintf("%02d",$hour);
$mon = sprintf("%02d",$mon); $mday = sprintf("%02d",$mday);
$year += 1900;
my $zone = zone();
my $t = "[$mday/$months[$mon]/$year:$hour:$min:$sec $zone]";
my $log = qq~$env - $remoteuser $t "$method $ENV{'SERVER_PROTOCOL'}" 200 $len
$refer $agent~;
open (LOG,">>../../../logs/$host"."_access.log") or die ("Error: $!");
if ($use_flock) { flock(LOG, 2) or die ("Unable to get exclusive lock.\nReason:
$!") }
print LOG "$log\n";
close LOG or die ("Error: $!");
print qq~$log\n~;
exit;
####################
sub zone {
my (@g) = gmtime(time);
my $off;
$off = $sec - $g[0]
+ ($min - $g[1]) * 60
+ ($hour - $g[2]) * 3600;
if ($yday == $g[7]) {
# done
} elsif ($yday == $g[7] + 1) {
$off += 86400;
} elsif ($yday == $g[7] - 1) {
$off -= 86400;
} elsif ($yday < $g[7]) {
$off += 86400;
} else { $off -= 86400; }
return sprintf("%s%02d%02d",($off<0?'-':'+'),$off/3600,($off%3600)/60);
}
* Все там будем...
-- Hиколай
----------------------------------------------------------------------
---
* Origin: Истина - это вовсе не то, что можно убедительно доказать (2:5056/30)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/18134001b5bc.html, оценка из 5, голосов 10
|