HTTP::Daemon::Threaded::Logable


HTTP-Daemon-Threaded documentation Contained in the HTTP-Daemon-Threaded distribution.

Index


Code Index:


HTTP-Daemon-Threaded documentation Contained in the HTTP-Daemon-Threaded distribution.
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;