package Log::Dispatch::File::Locked;
use strict;
use warnings;
use base qw( Log::Dispatch::File );
use Fcntl qw(:DEFAULT :flock);
sub _open_file
{
my $self = shift;
$self->SUPER::_open_file();
my $fh = $self->{fh};
flock($fh, LOCK_EX)
or die "Cannot lock '$self->{filename}' for writing: $!";
seek($fh, 0, 2)
or die "Cannot seek to end of '$self->{filename}': $!";
}
1;
__END__
=head1 NAME
Log::Dispatch::File::Locked - Extension to Log::Dispatch::File to facilitate locking
=head1 SYNOPSIS
use Log::Dispatch::File::Locked;
my $file = Log::Dispatch::File::Locked->new( name => 'locked_file1',
min_level => 'info',
filename => 'Somefile.log',
);
$file->log( level => 'emerg', message => "I've fallen and I can't get up\n" );
=head1 DESCRIPTION
This module acts exactly like Log::Dispatch::File except that it
obtains an exclusive lock on the file before writing to it.
=head1 METHODS
All methods are inherited from Log::Dispatch::File.
=head1 AUTHOR
Dave Rolsky, <autarch@urth.org>
=cut