$heap->{client}->put($request);
}elsif(my $response = dispatch($request)){
$heap->{client}->put($response);
+ $log->log_access($request, $response);
}
$kernel->yield('shutdown');
package Keitairc::Log;
use Keitairc::Config;
+use POSIX qw(strftime locale_h);
use Keitairc::Log::Syslog;
use Keitairc::Log::File;
use Keitairc::Log::Stdio;
$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;
$me;
}
-sub log_error {
+sub log_access {
my ($me, $m) = @_;
- $me->_log('error', $m);
+ $me->_log('access', $m);
}
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});
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});
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'));
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});
bless $me;
}
-sub log_error {
+sub log_access {
my ($me, $m) = @_;
- syslog(LOG_ERR, $m);
+ syslog(LOG_NOTICE, $m);
}
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);