
Basset::Logger - Logger object. Writes things to files.

Jim Thomason, jim@jimandkoka.com

my $logger = Basset::Logger->new( 'handle' => '/tmp/weasels.log' );
$logger->log("Weasels in the hen house!");
$logger->close();
Create a logger object, then log data to it, then close it when you're done. Easy as pie. Works beautifully in conjunction with Basset::NotificationCenter.
You will need to put a types entry into your conf file for
logger=Basset::Logger
(or whatever center you're using)

The place you log to. Either a string (which will be opened in append mode) or a globref.
$logger->handle('/path/to/log.log');
open (LOG, ">>/path/to/log.log");
$logger->handle(\*LOG);
my $o = __PACKAGE__->new(); $test->ok($o, "Got object for handle"); $test->is(scalar($o->handle($o)), undef, "Cannot set handle to unknown reference"); $test->is($o->errcode, "BL-03", "proper error code");
local $@ = undef; eval "use File::Temp"; my $file_temp_exists = $@ ? 0 : 1;
if ($file_temp_exists) { my $temp = File::Temp->new; my $name = $temp->filename; $test->is(ref($o->handle($name)), 'GLOB', "created glob"); open (my $glob, $name); $test->is($o->handle($glob), $glob, "set glob"); chmod 000, $name; $test->is(scalar($o->handle($name)), undef, "could not set handle to unwritable file"); $test->is($o->errcode, "BL-01", "proper error code"); }
{ my $o = __PACKAGE__->new(); $test->ok($o, "Got object"); $test->is(scalar(__PACKAGE__->closed), undef, "could not call object method as class method"); $test->is(__PACKAGE__->errcode, "BO-08", "proper error code"); $test->is(scalar($o->closed), 0, 'closed is 0 by default'); $test->is($o->closed('abc'), 'abc', 'set closed to abc'); $test->is($o->closed(), 'abc', 'read value of closed - abc'); my $h = {}; $test->ok($h, 'got hashref'); $test->is($o->closed($h), $h, 'set closed to hashref'); $test->is($o->closed(), $h, 'read value of closed - hashref'); my $a = []; $test->ok($a, 'got arrayref'); $test->is($o->closed($a), $a, 'set closed to arrayref'); $test->is($o->closed(), $a, 'read value of closed - arrayref'); }
my $o = __PACKAGE__->new(); $test->ok($o, "got object"); $test->is($o->close, 1, "closing non-existent handle is fine"); $test->is($o->closed, 0, "handle remains open");
local $@ = undef; eval "use File::Temp"; my $file_temp_exists = $@ ? 0 : 1;
if ($file_temp_exists) { my $temp = File::Temp->new; my $name = $temp->filename; $test->is(ref($o->handle($name)), 'GLOB', "created glob"); $test->is($o->closed, 0, "file handle is open"); $test->is($o->close, 1, "closed file handle"); $test->is($o->closed, 1, "filehandle is closed"); }
my $o = __PACKAGE__->new(); $test->ok($o, "Got object"); $test->is(scalar(__PACKAGE__->stamped), undef, "could not call object method as class method"); $test->is(__PACKAGE__->errcode, "BO-08", "proper error code"); $test->is(scalar($o->stamped), 1, 'stamped is 1 by default'); $test->is($o->stamped('abc'), 'abc', 'set stamped to abc'); $test->is($o->stamped(), 'abc', 'read value of stamped - abc'); my $h = {}; $test->ok($h, 'got hashref'); $test->is($o->stamped($h), $h, 'set stamped to hashref'); $test->is($o->stamped(), $h, 'read value of stamped - hashref'); my $a = []; $test->ok($a, 'got arrayref'); $test->is($o->stamped($a), $a, 'set stamped to arrayref'); $test->is($o->stamped(), $a, 'read value of stamped - arrayref');
my $o = __PACKAGE__->new(); $test->ok($o, "Got logger object"); $test->is($o->closed, 0, 'closed is 0'); $test->is($o->stamped, 1, 'stamped is 1');
logs the item to the logger's handle.
$logger->log("one val", "two vals", "three vals");
prints out one per line, tab indented on subsequent lines.
one val
two vals
three vals
my $o = __PACKAGE__->new(); $test->ok($o, "got object"); $test->is($o->close, 1, "closing non-existent handle is fine"); $test->is($o->closed, 0, "handle remains open");
$test->is(scalar($o->log('foo')), undef, "Cannot log w/o handle");
$test->is($o->closed(1), 1, "closed handle"); $test->is(scalar($o->log), undef, "Cannot log w/o note"); $test->is($o->errcode, "BL-07", "proper error code"); $test->is(scalar($o->log('foo')), undef, "Cannot log to closed handle"); $test->is($o->errcode, "BL-08", "proper error code");
local $@ = undef; eval "use File::Temp"; my $file_temp_exists = $@ ? 0 : 1;
if ($file_temp_exists) { { my $temp = File::Temp->new; my $name = $temp->filename; $test->is(ref($o->handle($name)), 'GLOB', "created glob"); $test->is($o->log('foo'), 1, "logged foo to file"); open (my $reader, $name); { local $/ = undef; my $in_file = <$reader>; $test->like($in_file, qr{^AT \(\w+\s+\w+\s+\d+\s+\d+:\d+:\d+\s+\d+\):\tfoo\n$}, "data was logged to file with stamp"); } } { $test->is($o->stamped(0), 0, "shut off time stamping"); my $temp = File::Temp->new; my $name = $temp->filename; $test->is(ref($o->handle($name)), 'GLOB', "created glob"); $test->is($o->log('foo'), 1, "logged foo to file"); open (my $reader, $name); { local $/ = undef; my $in_file = <$reader>; $test->like($in_file, qr{^foo\n$}, "data was logged to file without stamp"); } $test->is($o->stamped(1), 1, "turned on time stamping"); } { my $temp = File::Temp->new; my $name = $temp->filename; $test->is(ref($o->handle($name)), 'GLOB', "created glob"); $test->is($o->log({'args' => ['foo']}), 1, "logged foo to file in note"); open (my $reader, $name); { local $/ = undef; my $in_file = <$reader>; $test->like($in_file, qr{^AT \(\w+\s+\w+\s+\d+\s+\d+:\d+:\d+\s+\d+\):\tfoo\n$}, "data was logged to file with stamp"); } } { $test->is($o->stamped(0), 0, "shut off time stamping"); my $temp = File::Temp->new; my $name = $temp->filename; $test->is(ref($o->handle($name)), 'GLOB', "created glob"); $test->is($o->log({'args' => ['foo']}), 1, "logged foo to file in note"); open (my $reader, $name); { local $/ = undef; my $in_file = <$reader>; $test->like($in_file, qr{^foo\n$}, "data was logged to file without stamp"); } $test->is($o->stamped(1), 1, "turned on time stamping"); } { my $temp = File::Temp->new; my $name = $temp->filename; $test->is(ref($o->handle($name)), 'GLOB', "created glob"); $test->is($o->log({'args' => ['foo', 'bar']}), 1, "logged foo, bar to file in note"); open (my $reader, $name); { local $/ = undef; my $in_file = <$reader>; $test->like($in_file, qr{^AT \(\w+\s+\w+\s+\d+\s+\d+:\d+:\d+\s+\d+\):\tfoo\n\tbar\n$}, "data was logged to file with stamp"); } } { $test->is($o->stamped(0), 0, "shut off time stamping"); my $temp = File::Temp->new; my $name = $temp->filename; $test->is(ref($o->handle($name)), 'GLOB', "created glob"); $test->is($o->log({'args' => ['foo', 'bar']}), 1, "logged foo, bar to file in note"); open (my $reader, $name); { local $/ = undef; my $in_file = <$reader>; $test->like($in_file, qr{^foo\n\tbar\n$}, "data was logged to file with stamp"); } $test->is($o->stamped(1), 1, "turned on time stamping"); } { my $temp = File::Temp->new; my $name = $temp->filename; $test->is(ref($o->handle($name)), 'GLOB', "created glob"); $test->is($o->log({'args' => ['foo', undef]}), 1, "logged foo, undef to file in note"); open (my $reader, $name); { local $/ = undef; my $in_file = <$reader>; $test->like($in_file, qr{^AT \(\w+\s+\w+\s+\d+\s+\d+:\d+:\d+\s+\d+\):\tfoo\n$}, "data was logged to file with stamp"); } } { my $temp = File::Temp->new; my $name = $temp->filename; $test->is(ref($o->handle($name)), 'GLOB', "created glob"); $test->is($o->log({}), 1, "logged empty note to file in note"); open (my $reader, $name); { local $/ = undef; my $in_file = <$reader>; $test->is($in_file,'', "no data logged w/o args"); } } }
my $o = __PACKAGE__->new(); $test->ok($o, "got object"); $test->is($o->close, 1, "closing non-existent handle is fine"); $test->is($o->closed, 0, "handle remains open");
local $@ = undef; eval "use File::Temp"; my $file_temp_exists = $@ ? 0 : 1;
if ($file_temp_exists) { my $temp = File::Temp->new; my $name = $temp->filename; $test->is(ref($o->handle($name)), 'GLOB', "created glob"); $test->is($o->closed, 0, "file handle is open"); $test->is($o->close, 1, "closed file handle"); $test->is($o->closed, 1, "filehandle is closed"); }