OSDN Git Service

access log (not finished yet)
authorISHIKAWA Mutsumi <ishikawa@hanzubon.jp>
Mon, 21 Jun 2010 17:07:15 +0000 (02:07 +0900)
committerISHIKAWA Mutsumi <ishikawa@hanzubon.jp>
Mon, 21 Jun 2010 17:07:15 +0000 (02:07 +0900)
keitairc
lib/Keitairc/Log.pm
lib/Keitairc/Log/File.pm
lib/Keitairc/Log/Stdio.pm
lib/Keitairc/Log/Syslog.pm

index a64defb..d3dd7e4 100755 (executable)
--- a/keitairc
+++ b/keitairc
@@ -121,6 +121,7 @@ sub http_request{
                $heap->{client}->put($request);
        }elsif(my $response = dispatch($request)){
                $heap->{client}->put($response);
+               $log->log_access($request, $response);
        }
 
        $kernel->yield('shutdown');
index cd8fade..ef712de 100644 (file)
@@ -7,6 +7,7 @@
 
 package Keitairc::Log;
 use Keitairc::Config;
+use POSIX qw(strftime locale_h);
 use Keitairc::Log::Syslog;
 use Keitairc::Log::File;
 use Keitairc::Log::Stdio;
@@ -39,20 +40,49 @@ sub config {
        $me->{writer} = new Keitairc::Log::Stdio({config => $me->{Config}}) if (!defined $me->{writer} || !$me->{writer});
 }
 
+sub log_access {
+       my ($me, $request, $response) = @_;
+       my $old_locate = setlocale(LC_TIME);
+       setlocale(LC_TIME, 'POSIX');
+       warn $request->as_string();
+       $me->{writer}->log_access(sprintf('%s %s %s [%s] "%s" %s %s "%s" "%s"',
+                                         $request->header('remote-addr') || '-',
+                                         '-',
+                                         $request->header('Remote-User') || '-',
+                                         strftime('%d/%b/%Y:%T %z', localtime()),
+                                         $request->method() . ' ' . $request->uri() || '-',
+                                         $response->code,
+                                         length($response->content),
+                                         $request->header('referer') || '-',
+                                         $request->header('User-Agent') || '-'));
+       setlocale(LC_TIME, $old_locate);
+}
+
+sub _format {
+       my ($me, $m) = @_;
+       if (!defined $me->{type} || $me->{type} !~ /^syslog$/i) {
+               my $old_locate = setlocale(LC_TIME);
+               setlocale(LC_TIME, 'POSIX');
+               $m = strftime('%b %d %T ', localtime()) . $m;
+               setlocale(LC_TIME, $old_locate);
+       }
+       return $m;
+}
+
 sub log {
        my ($me, $m) = @_;
-       $me->{writer}->log_info($m);
+       $me->{writer}->log_info($me->_format($m));
 }
 
 sub log_die {
        my ($me, $m) = @_;
-       $me->{writer}->log_error($m);
+       $me->{writer}->log_error($me->_format($m));
        exit 1;
 }
 
 sub log_debug{
        my ($me, $m) = @_;
-       $me->{writer}->log_debug($m);
+       $me->{writer}->log_debug($me->_format($m));
 }
 
 1;
index b9bf9c7..8fe26d5 100644 (file)
@@ -34,9 +34,9 @@ sub new {
        $me;
 }
 
-sub log_error {
+sub log_access {
        my ($me, $m) = @_;
-       $me->_log('error', $m);
+       $me->_log('access', $m);
 }
 
 sub log_info {
@@ -44,6 +44,11 @@ sub log_info {
        $me->_log('info', $m);
 }
 
+sub log_error {
+       my ($me, $m) = @_;
+       $me->_log('error', $m);
+}
+
 sub log_debug {
        my ($me, $m) = @_;
        $me->_log('debug', $m) if ($me->{debug});
@@ -51,6 +56,7 @@ sub log_debug {
 
 sub log_close {
        my ($me) = @_;
+       close($me->{fh}->{access}) if (defined $me->{fh}->{access});
        close($me->{fh}->{info}) if (defined $me->{fh}->{info});
        close($me->{fh}->{error}) if (defined $me->{fh}->{error});
        close($me->{fh}->{debug}) if ($me->{debug} && defined $me->{fh}->{debug});
@@ -67,13 +73,19 @@ sub _log_open {
        if (!defined $me->{prev} || $me->{prev} != $current) {
                $me->{prev} = $current;
 
+               close($me->{fh}->{access}) if (defined $me->{fh}->{access});
                close($me->{fh}->{info}) if (defined $me->{fh}->{info});
                close($me->{fh}->{error}) if (defined $me->{fh}->{error});
 
+               $me->{fh}->{access} = *STDOUT if (!open($me->{fh}->{access}, '>> ' . $me->{dir} . '/access_' . $current . '.log'));
+               $me->{fh}->{access}->autoflush(1);
+
                $me->{fh}->{info} = *STDOUT if (!open($me->{fh}->{info}, '>> ' . $me->{dir} . '/info_' . $current . '.log'));
                $me->{fh}->{info}->autoflush(1);
+
                $me->{fh}->{error} = *STDERR if (!open($me->{fh}->{error}, '>> ' . $me->{dir} . '/error_' . $current . '.log'));
                $me->{fh}->{error}->autoflush(1);
+
                if ($me->{debug}) {
                        close($me->{fh}->{debug}) if (defined $me->{fh}->{debug});
                        $me->{fh}->{debug} = *STDERR if (!open($me->{fh}->{debug}, '>> ' . $me->{dir} . '/debug_' . $current . '.log'));
index 801d13d..c489f13 100644 (file)
@@ -17,16 +17,22 @@ sub new {
        bless $me;
 }
 
-sub log_error {
+sub log_access {
        my ($me, $m) = @_;
-       print STDERR "keitairc [ERROR]: $m\n";
+       print STDOUT "keitairc [ACCESS]: $m\n";
 }
 
 sub log_info {
        my ($me, $m) = @_;
-       print STDOUT "keitairc: $m\n";
+       print STDOUT "keitairc [INFO]: $m\n";
+}
+
+sub log_error {
+       my ($me, $m) = @_;
+       print STDERR "keitairc [ERROR]: $m\n";
 }
 
+
 sub log_debug {
        my ($me, $m) = @_;
        print STDERR "keitairc [DEBUG]: $m\n" if ($me->{debug});
index 653fc0b..7ccf72d 100644 (file)
@@ -29,9 +29,9 @@ sub new {
        bless $me;
 }
 
-sub log_error {
+sub log_access {
        my ($me, $m) = @_;
-       syslog(LOG_ERR, $m);
+       syslog(LOG_NOTICE, $m);
 }
 
 sub log_info {
@@ -39,6 +39,11 @@ sub log_info {
        syslog(LOG_INFO, $m);
 }
 
+sub log_error {
+       my ($me, $m) = @_;
+       syslog(LOG_ERR, $m);
+}
+
 sub log_debug {
        my ($me, $m) = @_;
        syslog(LOG_DEBUG, $m);