Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Apache log   Nikolay Pichtin   11 Jan 2004 21:43:12 
 Re: Apache log   Artem Chuprina   12 Jan 2004 16:03:36 
Архивное /ru.perl/18134001b5bc.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional