1 # -*- mode: perl; coding: utf-8 -*-
4 # Copyright (c) 2008 Jun Morimoto <morimoto@mrmt.net>
5 # Copyright (c) 2010 ISHIKAWA Mutsumi <ishikawa@hanzubon.jp>
6 # This program is covered by the GNU General Public License 2
10 use POSIX qw(strftime locale_h);
15 my ($proto, $arg) = @_;
20 if (defined $arg->{config}) {
21 $me->config($arg->{config});
23 require Keitairc::Log::Stdio;
24 $me->{writer} = new Keitairc::Log::Stdio();
33 ($me->{type}, undef) = split(':', $me->{Config}->log(), 2);
36 if ($me->{type} =~ /^syslog$/i) {
37 if (eval "use Sys::Syslog") {
38 require Keitairc::Log::Syslog;
39 $me->{writer} = new Keitairc::Log::Syslog({config => $me->{Config}});
41 # force fallback to file writer
47 if ($me->{type} =~ /^file$/i ) {
48 require Keitairc::Log::File;
49 $me->{writer} = new Keitairc::Log::File({config => $me->{Config}});
51 require Keitairc::Log::Stdio;
52 $me->{writer} = new Keitairc::Log::Stdio({config => $me->{Config}}) if (!defined $me->{writer} || !$me->{writer});
55 $me->log_error('Sys::Syslog is missing, fallback to file log writer');
60 my ($me, $ip, $request, $response) = @_;
61 my $old_locate = setlocale(LC_TIME);
62 setlocale(LC_TIME, 'POSIX');
63 $me->{writer}->log_access(sprintf('%s %s %s [%s] "%s" %s %s "%s" "%s"',
66 $request->header('Remote-User') || '-',
67 strftime('%d/%b/%Y:%T %z', localtime()),
68 $request->method() . ' ' . $request->uri() || '-',
70 length($response->content),
71 $request->header('referer') || '-',
72 $request->header('User-Agent') || '-'));
73 setlocale(LC_TIME, $old_locate);
78 if (!defined $me->{type} || $me->{type} !~ /^syslog$/i) {
79 my $old_locate = setlocale(LC_TIME);
80 setlocale(LC_TIME, 'POSIX');
81 $m = strftime('%b %d %T ', localtime()) . $m;
82 setlocale(LC_TIME, $old_locate);
89 $me->{writer}->log_info($me->_format($m));
94 $me->{writer}->log_error($me->_format($m));
99 $me->{writer}->log_debug($me->_format($m));