HTTP::Daemon::Threaded::Logable
package HTTP::Daemon::Threaded::Logable;
use strict;
use warnings;
our $VERSION = '0.91';
sub logError {
my ($self, $msg) = @_;
$self->{EventLogger}->log(join('', '[ERROR]: [', ref $self, '] ', $msg, "\n")),
return undef
if $self->{EventLogger};
print STDERR join('', '[ERROR]: [', ref $self, '] ', $msg), "\n";
return undef;
}
sub logWarning {
my ($self, $msg) = @_;
return $self
unless ($self->{LogLevel} > 1);
$self->{EventLogger}->log(join('', '[WARNING]: [', ref $self, '] ', $msg, "\n")),
return $self
if $self->{EventLogger};
print STDERR join('', '[WARNING]: [', ref $self, '] ', $msg), "\n";
return $self;
}
sub logInfo {
my ($self, $msg, $level) = @_;
$level = 2 unless defined($level);
return $self
unless ($self->{LogLevel} > $level);
$self->{EventLogger}->log(join('', 'Info: [', ref $self, '] ', $msg, "\n")),
return $self
if $self->{EventLogger};
print STDERR join('', 'Info: [', ref $self, '] ', $msg), "\n";
return $self;
}
sub logTiming {
print STDERR $_[1], "\n"
if $_[0]->{Stats}{Debug}{Timing} || $_[0]->{_diag_time};
return $_[0];
}
sub _formatted_log_time {
#
# format: [DD/Mmm/YYYY:HH:MM:SS -UUUU]
# for now we use gmtime, since we don't have a handy
# UTC delta method
#
my $dt = gmtime();
my @t = split(/\s+/, $dt);
return "[$t[2]/$t[1]/$t[4]:$t[3] +0000]";
}
sub scanForLogging {
my ($self, $request) = @_;
return undef unless $self->{WebLogger};
my $basic = '"' . join(' ', $request->method(), $request->uri(), $request->protocol()) . '"';
my ($userid, $pass) = $request->authorization_basic();
$userid = '-'
unless $userid;
my $refer = $request->referer || '-';
$refer = '"' . $refer . '"'
unless ($refer eq '-');
my $useragent = $request->user_agent || '-';
$useragent = '"' . $useragent . '"'
unless ($useragent eq '-');
$self->{_log_fragments} = [ "- $userid", $basic, "$refer $useragent" ];
return $self;
}
sub logRequest {
my ($self, $addr, $status, $size) = @_;
return $self unless $self->{WebLogger};
#
# fields are (separated by a single space):
# client IP address,
# clientid (always '-'),
# HTTP Authent userid (if any, otherwise, '-'),
# [end-of-request timestamp as (Day/Month/Year:HH:MM:SS UTC offset)]
# "basic request header (including method)"
# response status code
# resp size ("-" if no resp)
# "Referer"
# "UserAgent"
#
my $msg = join(' ',
$addr,
$self->{_log_fragments}[0],
_formatted_log_time(),
$self->{_log_fragments}[1],
$status,
$size || '-',
$self->{_log_fragments}[2]);
$self->{WebLogger}->log($msg),
return $self;
}
sub setLogLevel { $_[0]->{LogLevel} = $_[1]; }
sub getLogLevel { return $_[0]->{LogLevel}; }
1;