Logfile-Rotate-1.04/ 0000750 0000146 0000146 00000000000 07152632260 0014577 5 ustar 00paulg staff 0016777 0000001 Logfile-Rotate-1.04/t/ 0000750 0000146 0000146 00000000000 07152632260 0015042 5 ustar 00paulg staff 0016777 0000001 Logfile-Rotate-1.04/t/05flock.t 0000644 0000146 0000146 00000002013 07150140160 0016462 0 ustar 00paulg staff 0016777 0000001
BEGIN {print "1..15\n";}
END {print "not ok 1\n" unless $loaded;}
use Logfile::Rotate;
$loaded = 1;
print "ok 1\n";
use File::Copy;
###############################################################################
# T E S T S T R A I G H T R O T A T I O N
###############################################################################
my $i = 2;
my @bool = qw (yes no);
$|=1;
while ($bool = pop @bool) {
print "\ntesting flock: $bool\n";
my $cnt = 3;
my $file_no = 1;
copy('t/rotate.log', 't/rotate.tmp');
print "not "
unless $log = new Logfile::Rotate( File => 't/rotate.tmp',
Count => $cnt ,
Flock => $bool ,
Gzip => 'no' );
print "ok ",$i++,"\n";
while($cnt-- > 0) {
$log->rotate() or print "not ";
print "ok ",$i++,"\n";
my $f = "t/rotate.tmp." . $file_no++;
print "not "
unless ( -f $f );
print "ok ",$i++,"\n";
copy('t/rotate.log', 't/rotate.tmp');
}
while($file_no-- > 0) {
my $f = "t/rotate.tmp." . $file_no;
unlink $f;
}
unlink('t/rotate.tmp');
}
1;
e.tmp');
print "not "
unless $log = new Logfile::Rotate( File => 't/rotate.tmp',
Count => $cnt ,
Flock => $bool ,
Gzip => 'no' );
print "ok ",$i++,"\n";
while($cnt-- > 0) {
$log->rotate() or print "not ";
print "ok ",$i++,"\n";
my $f = "t/rotate.tmp." . $file_no++;
print "not "
unless ( -f $f );
print "ok ",$i++,"\n";
copy('t/rotate.log', 't/rotate.tmp');
}
while($file_no-- > 0) {
my $f = "t/rotate.tmp." . $file_no;
unlink $f;
}
unlink('t/rotate.tmpLogfile-Rotate-1.04/t/04dir.t 0000644 0000146 0000146 00000001764 06672122522 0016167 0 ustar 00paulg staff 0016777 0000001
BEGIN {print "1..8\n";}
END {print "not ok 1\n" unless $loaded;}
use Logfile::Rotate;
$loaded = 1;
print "ok 1\n";
use File::Copy;
###############################################################################
# T E S T D I R A T T R I B U T E
###############################################################################
my $i = 2;
my $cnt = 3;
my $file_no = 1;
copy('t/rotate.log', 't/rotate.tmp');
print "not "
unless $log = new Logfile::Rotate( File => 't/rotate.tmp',
Count => $cnt ,
Gzip => 'no' ,
Dir => 't/tmp' );
print "ok ",$i++,"\n";
while($cnt-- > 0) {
$log->rotate() or print "not ";
print "ok ",$i++,"\n";
my $f = "t/tmp/rotate.tmp." . $file_no++;
print "not " unless ( -f $f );
print "ok ",$i++,"\n";
copy('t/rotate.log', 't/rotate.tmp');
}
while($file_no-- > 0) {
my $f = "t/tmp/rotate.tmp." . $file_no;
unlink $f;
}
unlink('t/rotate.tmp');
rmdir ('t/tmp');
1;
tmp',
Logfile-Rotate-1.04/t/03compress.t 0000644 0000146 0000146 00000002160 06672122522 0017232 0 ustar 00paulg staff 0016777 0000001
BEGIN {print "1..8\n";}
END {print "not ok 1\n" unless $loaded;}
use Config;
use Logfile::Rotate;
$loaded = 1;
print "ok 1\n";
use File::Copy;
###############################################################################
# T E S T C O M P R E S S A T T R I B U T E
###############################################################################
# skip if perl does not know about gzip
# my $Config; $Config{'gzip'} = undef;
unless (defined ($Config{'gzip'})) {
for ($i=2; $i<9; $i++) {
print "ok $i # skipped on your platform\n";
}
exit 0;
}
$i=2;
$cnt = 3;
$file_no = 1;
copy('t/rotate.log', 't/rotate.tmp');
print "not "
unless $log = new Logfile::Rotate( File => 't/rotate.tmp',
Count => $cnt );
print "ok ",$i++,"\n";
while($cnt-- > 0) {
$log->rotate() or print "not ";
print "ok ",$i++,"\n";
my $f = "t/rotate.tmp." . $file_no++ . ".gz";
print "not "
unless( -f $f );
print "ok ",$i++,"\n";
copy('t/rotate.log', 't/rotate.tmp');
}
while($file_no-- > 0) {
my $f = "t/rotate.tmp." . $file_no . ".gz";
unlink $f;
}
unlink('t/rotate.tmp');
1;
og', 't/rotate.tmp');
print "not "
unless $log = new Logfile::Rotate( File => 't/rotate.tmp',
Count => $cnt );
print "ok ",$i++,"\n";
while($cnt-- > 0) {
$log->rotate() or print "not ";
print "ok ",$i++,"\n";
my $f = "t/rotate.tmp." . $file_no++ . ".gz";
print "not "
unless( -f $f );
print "ok ",$i++,"\n";
copy('t/rotate.log', 't/rotate.tmp');
}
Logfile-Rotate-1.04/t/rotate.log 0000644 0000146 0000146 00000004102 06672062303 0017046 0 ustar 00paulg staff 0016777 0000001 |000 nul|001 soh|002 stx|003 etx|004 eot|005 enq|006 ack|007 bel|
|010 bs |011 ht |012 nl |013 vt |014 np |015 cr |016 so |017 si |
|020 dle|021 dc1|022 dc2|023 dc3|024 dc4|025 nak|026 syn|027 etb|
|030 can|031 em |032 sub|033 esc|034 fs |035 gs |036 rs |037 us |
|040 sp |041 ! |042 " |043 # |044 $ |045 % |046 & |047 ' |
|050 ( |051 ) |052 * |053 + |054 , |055 - |056 . |057 / |
|060 0 |061 1 |062 2 |063 3 |064 4 |065 5 |066 6 |067 7 |
|070 8 |071 9 |072 : |073 ; |074 < |075 = |076 > |077 ? |
|100 @ |101 A |102 B |103 C |104 D |105 E |106 F |107 G |
|110 H |111 I |112 J |113 K |114 L |115 M |116 N |117 O |
|120 P |121 Q |122 R |123 S |124 T |125 U |126 V |127 W |
|130 X |131 Y |132 Z |133 [ |134 \ |135 ] |136 ^ |137 _ |
|140 ` |141 a |142 b |143 c |144 d |145 e |146 f |147 g |
|150 h |151 i |152 j |153 k |154 l |155 m |156 n |157 o |
|160 p |161 q |162 r |163 s |164 t |165 u |166 v |167 w |
|170 x |171 y |172 z |173 { |174 | |175 } |176 ~ |177 del|
| 00 nul| 01 soh| 02 stx| 03 etx| 04 eot| 05 enq| 06 ack| 07 bel|
| 08 bs | 09 ht | 0a nl | 0b vt | 0c np | 0d cr | 0e so | 0f si |
| 10 dle| 11 dc1| 12 dc2| 13 dc3| 14 dc4| 15 nak| 16 syn| 17 etb|
| 18 can| 19 em | 1a sub| 1b esc| 1c fs | 1d gs | 1e rs | 1f us |
| 20 sp | 21 ! | 22 " | 23 # | 24 $ | 25 % | 26 & | 27 ' |
| 28 ( | 29 ) | 2a * | 2b + | 2c , | 2d - | 2e . | 2f / |
| 30 0 | 31 1 | 32 2 | 33 3 | 34 4 | 35 5 | 36 6 | 37 7 |
| 38 8 | 39 9 | 3a : | 3b ; | 3c < | 3d = | 3e > | 3f ? |
| 40 @ | 41 A | 42 B | 43 C | 44 D | 45 E | 46 F | 47 G |
| 48 H | 49 I | 4a J | 4b K | 4c L | 4d M | 4e N | 4f O |
| 50 P | 51 Q | 52 R | 53 S | 54 T | 55 U | 56 V | 57 W |
| 58 X | 59 Y | 5a Z | 5b [ | 5c \ | 5d ] | 5e ^ | 5f _ |
| 60 ` | 61 a | 62 b | 63 c | 64 d | 65 e | 66 f | 67 g |
| 68 h | 69 i | 6a j | 6b k | 6c l | 6d m | 6e n | 6f o |
| 70 p | 71 q | 72 r | 73 s | 74 t | 75 u | 76 v | 77 w |
| 78 x | 79 y | 7a z | 7b { | 7c | | 7d } | 7e ~ | 7f del|
| 42 B | 43 C | 44 D | 45 E | 46 F | 47 G |
| 48 H | 49 I | 4a J | 4b K | 4c L | 4d M | 4e N | 4f O |
| 50 P | 51 Q | 52 R | 53 S | 54 T | 55 U | 56 V | 57 W |
| 58 X | 59 Y | 5a Z | 5b [ | 5c \ | 5d ] | 5e ^ | 5f _ |
| 60 ` | 61 a | 62 b | 63 c | 64 d | 65 e | 66 f | 67 g |
| 68 h | 69 i | 6a j | 6b k | 6c l | 6d m | 6e n | 6f o |
| 70 p | 71 q | 72 r | 73 s | 74 t | 75 u | 76 v | 77 w |
Logfile-Rotate-1.04/t/01rotate.t 0000644 0000146 0000146 00000001677 06672122522 0016707 0 ustar 00paulg staff 0016777 0000001
BEGIN {print "1..8\n";}
END {print "not ok 1\n" unless $loaded;}
use Logfile::Rotate;
$loaded = 1;
print "ok 1\n";
use File::Copy;
###############################################################################
# T E S T S T R A I G H T R O T A T I O N
###############################################################################
my $i = 2;
my $cnt = 3;
my $file_no = 1;
copy('t/rotate.log', 't/rotate.tmp');
print "not "
unless $log = new Logfile::Rotate( File => 't/rotate.tmp',
Count => $cnt ,
Gzip => 'no' );
print "ok ",$i++,"\n";
while($cnt-- > 0) {
$log->rotate() or print "not ";
print "ok ",$i++,"\n";
my $f = "t/rotate.tmp." . $file_no++;
print "not "
unless ( -f $f );
print "ok ",$i++,"\n";
copy('t/rotate.log', 't/rotate.tmp');
}
while($file_no-- > 0) {
my $f = "t/rotate.tmp." . $file_no;
unlink $f;
}
unlink('t/rotate.tmp');
1;
unless $log = new Logfile::Rotate( File => 't/rotate.tmp',
Logfile-Rotate-1.04/t/07pre.t 0000644 0000146 0000146 00000002046 07150140160 0016162 0 ustar 00paulg staff 0016777 0000001
BEGIN {print "1..15\n";}
END {print "not ok 1\n" unless $loaded;}
use Logfile::Rotate;
$loaded = 1;
print "ok 1\n";
use File::Copy;
###############################################################################
# T E S T S T R A I G H T R O T A T I O N
###############################################################################
my $i = 2;
$t1 = sub { print "test 1\n"; };
$t2 = sub { print "test 2\n"; };
my @subs = ($t1, $t2);
$|=1;
while ($sub = pop @subs) {
my $cnt = 3;
my $file_no = 1;
copy('t/rotate.log', 't/rotate.tmp');
print "not "
unless $log = new Logfile::Rotate( File => 't/rotate.tmp',
Count => $cnt ,
Pre => $sub,
Gzip => 'no' );
print "ok ",$i++,"\n";
while($cnt-- > 0) {
$log->rotate() or print "not ";
print "ok ",$i++,"\n";
my $f = "t/rotate.tmp." . $file_no++;
print "not "
unless ( -f $f );
print "ok ",$i++,"\n";
copy('t/rotate.log', 't/rotate.tmp');
}
while($file_no-- > 0) {
my $f = "t/rotate.tmp." . $file_no;
unlink $f;
}
unlink('t/rotate.tmp');
}
1;
tate.tmp');
print "not "
unless $log = new Logfile::Rotate( File => 't/rotate.tmp',
Count => $cnt ,
Pre => $sub,
Gzip => 'no' );
print "ok ",$i++,"\n";
while($cnt-- > 0) {
$log->rotate() or print "not ";
print "ok ",$i++,"\n";
my $f = "t/rotate.tmp." . $file_no++;
print "not "
unless ( -f $f );
print "ok ",$i++,"\n";
copy('t/rotate.log', 't/rotate.tmp');
}
while($file_no-- > 0) {
my $f = "t/rotate.tmp." . $file_no;
unlink $fLogfile-Rotate-1.04/t/09lib_compress.t 0000644 0000146 0000146 00000002205 07150140160 0020054 0 ustar 00paulg staff 0016777 0000001
BEGIN {print "1..8\n";}
END {print "not ok 1\n" unless $loaded;}
use Config;
use Logfile::Rotate;
$loaded = 1;
print "ok 1\n";
use File::Copy;
###############################################################################
# T E S T C O M P R E S S A T T R I B U T E
###############################################################################
# skip if Compress::Zlib is not installed
eval { require Compress::Zlib; };
if ($@) {
for ($i=2; $i<9; $i++) {
print "ok $i # skipped on your platform\n";
}
exit 0;
}
$i=2;
$cnt = 3;
$file_no = 1;
copy('t/rotate.log', 't/rotate.tmp');
print "not "
unless $log = new Logfile::Rotate( File => 't/rotate.tmp',
Gzip => 'lib',
Count => $cnt );
print "ok ",$i++,"\n";
while($cnt-- > 0) {
$log->rotate() or print "not ";
print "ok ",$i++,"\n";
my $f = "t/rotate.tmp." . $file_no++ . ".gz";
print "not "
unless( -f $f );
print "ok ",$i++,"\n";
copy('t/rotate.log', 't/rotate.tmp');
}
while($file_no-- > 0) {
my $f = "t/rotate.tmp." . $file_no . ".gz";
unlink $f;
}
unlink('t/rotate.tmp');
1;
new Logfile::Rotate( File => 't/rotate.tmp',
Gzip => 'lib',
Count => $cnt );
print "ok ",$i++,"\n";
while($cnt-- > 0) {
$log->rotate() or print "not ";
print "ok ",$i++,"\n";
my $f = "t/rotate.tmp." . $file_no++ . ".gz";
print "not "
unless( -f $f );
print "ok ",$i++,"\n";
copy('t/rotate.log',Logfile-Rotate-1.04/t/08post.t 0000644 0000146 0000146 00000002055 07150140160 0016362 0 ustar 00paulg staff 0016777 0000001
BEGIN {print "1..15\n";}
END {print "not ok 1\n" unless $loaded;}
use Logfile::Rotate;
$loaded = 1;
print "ok 1\n";
use File::Copy;
###############################################################################
# T E S T S T R A I G H T R O T A T I O N
###############################################################################
my $i = 2;
$t1 = sub { print "test 1 @_\n"; };
$t2 = sub { print "test 2 @_\n"; };
my @subs = ($t1, $t2);
$|=1;
while ($sub = pop @subs) {
my $cnt = 3;
my $file_no = 1;
copy('t/rotate.log', 't/rotate.tmp');
print "not "
unless $log = new Logfile::Rotate( File => 't/rotate.tmp',
Count => $cnt ,
Post => $sub,
Gzip => 'no' );
print "ok ",$i++,"\n";
while($cnt-- > 0) {
$log->rotate() or print "not ";
print "ok ",$i++,"\n";
my $f = "t/rotate.tmp." . $file_no++;
print "not "
unless ( -f $f );
print "ok ",$i++,"\n";
copy('t/rotate.log', 't/rotate.tmp');
}
while($file_no-- > 0) {
my $f = "t/rotate.tmp." . $file_no;
unlink $f;
}
unlink('t/rotate.tmp');
}
1;
ate.tmp');
print "not "
unless $log = new Logfile::Rotate( File => 't/rotate.tmp',
Count => $cnt ,
Post => $sub,
Gzip => 'no' );
print "ok ",$i++,"\n";
while($cnt-- > 0) {
$log->rotate() or print "not ";
print "ok ",$i++,"\n";
my $f = "t/rotate.tmp." . $file_no++;
print "not "
unless ( -f $f );
print "ok ",$i++,"\n";
copy('t/rotate.log', 't/rotate.tmp');
}
while($file_no-- > 0) {
my $f = "t/rotate.tmp." . $file_no;
unLogfile-Rotate-1.04/t/06persist.t 0000644 0000146 0000146 00000002771 07150140160 0017071 0 ustar 00paulg staff 0016777 0000001
BEGIN {print "1..30\n";}
END {print "not ok 1\n" unless $loaded;}
use Logfile::Rotate;
$loaded = 1;
print "ok 1\n";
use File::Copy;
###############################################################################
# T E S T S T R A I G H T R O T A T I O N
###############################################################################
my $i = 2;
my @bool = qw (yes no);
$|=1;
while ($bool = pop @bool) {
print "\ntesting persist: $bool\n";
my $cnt = 3;
my $file_no = 1;
copy('t/rotate.log', 't/rotate.tmp');
print "not "
unless $log = new Logfile::Rotate( File => 't/rotate.tmp',
Count => $cnt ,
Persist => $bool ,
Gzip => 'no' );
print "ok ",$i++,"\n";
while($cnt-- > 0) {
$log->rotate() or print "not ";
print "ok ",$i++,"\n";
my $f = "t/rotate.tmp." . $file_no++;
print "not "
unless ( -f $f );
print "ok ",$i++,"\n";
if ($bool eq 'yes') {
my @old_stat = stat 't/rotate.tmp';
my @new_stat = stat $f;
print "not " unless $old_stat[2] == $new_stat[2];
print "ok ",$i++,"\n";
print "not " unless $old_stat[8] == $new_stat[8];
print "ok ",$i++,"\n";
print "not " unless $old_stat[9] == $new_stat[9];
print "ok ",$i++,"\n";
print "not " unless $old_stat[4] == $new_stat[4];
print "ok ",$i++,"\n";
print "not " unless $old_stat[5] == $new_stat[5];
print "ok ",$i++,"\n";
}
copy('t/rotate.log', 't/rotate.tmp');
}
while($file_no-- > 0) {
my $f = "t/rotate.tmp." . $file_no;
unlink $f;
}
unlink('t/rotate.tmp');
}
1;
_stat[2Logfile-Rotate-1.04/t/02signal.t 0000644 0000146 0000146 00000001777 06672122522 0016670 0 ustar 00paulg staff 0016777 0000001
BEGIN {print "1..8\n";}
END {print "not ok 1\n" unless $loaded;}
use Logfile::Rotate;
$loaded = 1;
print "ok 1\n";
use File::Copy;
###############################################################################
# T E S T S I G N A L A T T R I B U T E
###############################################################################
my $i = 2;
copy('t/rotate.log', 't/rotate.tmp');
$cnt = 3;
$file_no = 1;
print "not "
unless $log = new Logfile::Rotate( File => 't/rotate.tmp',
Count => $cnt,
Gzip => 'no',
Signal => sub { print "ok "; },
);
print "ok ",$i++,"\n";
while($cnt-- > 0) {
$log->rotate() or print "not ";
print $i++,"\n"; ## rotate print's ok
my $f = "t/rotate.tmp." . $file_no++;
print "not " unless ( -f $f );
print "ok ",$i++,"\n";
copy('t/rotate.log', 't/rotate.tmp');
}
while($file_no-- > 0) {
my $f = "t/rotate.tmp." . $file_no;
unlink $f;
}
unlink('t/rotate.tmp');
1;
Logfile-Rotate-1.04/README 0000644 0000146 0000146 00000016404 07152632260 0015471 0 ustar 00paulg staff 0016777 0000001 NAME
Logfile::Rotate - Perl module to rotate logfiles.
SYNOPSIS
use Logfile::Rotate;
my $log = new Logfile::Rotate( File => '/var/adm/syslog/syslog.log',
Count => 7,
Gzip => 'lib',
Post => sub{
open(IN, "/var/run/syslog.pid");
kill("HUP", chomp(
Logfile::Rotate - Perl module to rotate logfiles.
I have used the name space of the Logfile::Base manpage package by Ulrich Pfeifer,
as the use of this module closely relates to the processing logfiles. The The Both the The The The The The copy function is implemented by using the the File::Copy manpage package, but
I have had a few people suggest that they would prefer the File::Move manpage.
I'm still not decided on this as you would loose data if the move should
fail.
If available You may now also use If no argument is defined it will first check to see if the
See the WARNING section below.
If you specify an argument for See the WARNING section below.
If a system call is made to gzip this makes this module vulnerable to
security problems if a rogue gzip is in your path or gzip has been
sabotaged. For this reason a STRONGLY RECOMMEND you DO NOT use this
module while you are ROOT. For a more secure alternative install the If you specify an argument for
If
Copyright (c) 1997-99 Paul Gampe. All rights reserved.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself. IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE. THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND
NON-INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN ``AS IS'' BASIS, AND
THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
the File::Copy manpage, the Logfile::Base manpage, flock
Changes file for change history and credits for contributions.
All functions return 1 on success, 0 on failure.
Paul Gampe <paulg@apnic.net>, C
/C
function is passed the current filename to be rotated as an
argument and the C
and C
NAME
SYNOPSIS
use Logfile::Rotate;
my $log = new Logfile::Rotate( File => '/var/adm/syslog/syslog.log',
Count => 7,
Gzip => 'lib',
Post => sub{
open(IN, "/var/run/syslog.pid");
kill("HUP", chomp(<IN>)); }
Dir => '/var/log/old',
Flock => 'yes',
Persist => 'yes',
);
# process log file
$log->rotate();
or
my $log = new Logfile::Rotate( File => '/var/adm/syslog',
Gzip => '/usr/local/bin/gzip');
# process log file
$log->rotate();
undef $log;
DESCRIPTION
new
accepts the following arguments, File
, Count
, Gzip
,
Pre
, Post
, Flock
and Dir
with only File
being mandatory.
new
will open and lock the file, so you may co-ordinate the
processing of the file with rotating it. The file is closed and
unlocked when the object is destroyed, so you can do this explicitly by
undef
'ing the object.
Pre
/Post
arguments allow you to pass function references to
this method, which you may use as a callback for any processing you want
before or after the rotation. For example, you may notify the process
writing to the file that it has been rotated.Pre
function is passed the current filename to be rotated as an
argument and the Post
function is passed the current filename that
was rotated and that file's new filename including any extension added
by compression previously.Pre
and Post
function references you provide are executed
within an eval
statement inside the rotate
method. If the eval
returns an error then the rotate
method will croak at that point.Signal
argument is deprecated by the Post
argument.Flock
argument allows you to specify whether the perl function
flock
is used to lock the file during the rotation operation.
Apparently flock causes problems on some platforms and this option has
been added to allow you to control the programs behaviour. By default
the file will be locked using flock
.Persist
argument allows you to control whether the program will
try and set the current log file ownership and permissions on any new
files that may be created by the rotation. In some circumstances the
program doing the file rotation may not have sufficient permission to
chown
on the file. By default the program will try and preserve
ownership and permissions.rotate()
new
to a file of the same
name, with a numeric extension and truncate the original file to zero
length. The numeric extension will range from 1 up to the value
specified by Count, or 7 if none is defined, with 1 being the most
recent file. When Count is reached, the older file is discarded in a
FIFO (first in, first out) fashion. If the argument Dir
was given,
all old files will be placed in the specified directory.
Post
function is the last step executed by the rotate method so
the return code of rotate will be the return code of the function you
proved, or 1 by default.Optional Compression
rotate
will also compress the file with the
gzip program or the program passed as the Gzip
argument.lib
as a value for the Gzip
argument. This
directs the program to load the Compress::Zlib
module, if available
and use it do the compression within perl. This avoids the security
issues associated with spawning external programs and is the recommended
value for this option.Compress::Zlib
module can be loaded then check the perl Config to
determine if gzip is available on your system. In this case the gzip
must be in your current path to succeed, and accept the -f
option.Optional Relocation Directory
Dir
then the file being rotated will
be relocated to the directory specified. Along with any other files
that may have been rotated previously. If the directory name specified
does not exist then it will be created with 0750
permissions. If you
wish to have other permissions on the directory then I would recommend
you create the directory before using this module.
WARNING
Compress::Zlib
module and
use the lib value for the Gzip
argument.Dir
and the directory name you pass
does not exist, this module will create the directory with
permissions 0750
.
DEPENDANCIES
Gzip
is being used it must create files with an extension
of .gz
for the file to be picked by the rotate cycle.
COPYRIGHT
SEE ALSO
RETURN
AUTHOR
the File::Copy manpage, the Logfile::Base manpage, flock Changes file for change history and credits for c #warning">WARNING
Logfile::Rotate - Perl module to rotate logfiles.
use Logfile::Rotate; my $log = new Logfile::Rotate( File => '/var/adm/syslog/syslog.log', Count => 7, Gzip => 'lib', Post => sub{ open(IN, "/var/run/syslog.pid"); kill("HUP", chomp(<IN>)); } Dir => '/var/log/old', Flock => 'yes', Persist => 'yes', );
# process log file
$log->rotate();
or
my $log = new Logfile::Rotate( File => '/var/adm/syslog', Gzip => '/usr/local/bin/gzip');
# process log file
$log->rotate(); undef $log;
I have used the name space of the Logfile::Base manpage package by Ulrich Pfeifer, as the use of this module closely relates to the processing logfiles.
new
accepts the following arguments, File
, Count
, Gzip
,
Pre
, Post
, Flock
and Dir
with only File
being mandatory.
new
will open and lock the file, so you may co-ordinate the
processing of the file with rotating it. The file is closed and
unlocked when the object is destroyed, so you can do this explicitly by
undef
'ing the object.
The Pre
/Post
arguments allow you to pass function references to
this method, which you may use as a callback for any processing you want
before or after the rotation. For example, you may notify the process
writing to the file that it has been rotated.
The Pre
function is passed the current filename to be rotated as an
argument and the Post
function is passed the current filename that
was rotated and that file's new filename including any extension added
by compression previously.
Both the Pre
and Post
function references you provide are executed
within an eval
statement inside the rotate
method. If the eval
returns an error then the rotate
method will croak at that point.
The Signal
argument is deprecated by the Post
argument.
The Flock
argument allows you to specify whether the perl function
flock
is used to lock the file during the rotation operation.
Apparently flock causes problems on some platforms and this option has
been added to allow you to control the programs behaviour. By default
the file will be locked using flock
.
The Persist
argument allows you to control whether the program will
try and set the current log file ownership and permissions on any new
files that may be created by the rotation. In some circumstances the
program doing the file rotation may not have sufficient permission to
chown
on the file. By default the program will try and preserve
ownership and permissions.
rotate()
new
to a file of the same
name, with a numeric extension and truncate the original file to zero
length. The numeric extension will range from 1 up to the value
specified by Count, or 7 if none is defined, with 1 being the most
recent file. When Count is reached, the older file is discarded in a
FIFO (first in, first out) fashion. If the argument Dir
was given,
all old files will be placed in the specified directory.
The Post
function is the last step executed by the rotate method so
the return code of rotate will be the return code of the function you
proved, or 1 by default.
The copy function is implemented by using the the File::Copy manpage package, but I have had a few people suggest that they would prefer the File::Move manpage. I'm still not decided on this as you would loose data if the move should fail.
If available rotate
will also compress the file with the
gzip program or the program passed as the Gzip
argument.
You may now also use lib
as a value for the Gzip
argument. This
directs the program to load the Compress::Zlib
module, if available
and use it do the compression within perl. This avoids the security
issues associated with spawning external programs and is the recommended
value for this option.
If no argument is defined it will first check to see if the
Compress::Zlib
module can be loaded then check the perl Config to
determine if gzip is available on your system. In this case the gzip
must be in your current path to succeed, and accept the -f
option.
See the WARNING section below.
If you specify an argument for Dir
then the file being rotated will
be relocated to the directory specified. Along with any other files
that may have been rotated previously. If the directory name specified
does not exist then it will be created with 0750
permissions. If you
wish to have other permissions on the directory then I would recommend
you create the directory before using this module.
See the WARNING section below.
If a system call is made to gzip this makes this module vulnerable to security problems if a rogue gzip is in your path or gzip has been sabotaged. For this reason a STRONGLY RECOMMEND you DO NOT use this module while you are ROOT.
For a more secure alternative install the Compress::Zlib
module and
use the lib value for the Gzip
argument.
If you specify an argument for Dir
and the directory name you pass
does not exist, this module will create the directory with
permissions 0750
.
If Gzip
is being used it must create files with an extension
of .gz
for the file to be picked by the rotate cycle.
Copyright (c) 1997-99 Paul Gampe. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN ``AS IS'' BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
the File::Copy manpage, the Logfile::Base manpage, flock Changes file for change history and credits for contributions.
All functions return 1 on success, 0 on failure.
Paul Gampe <paulg@apnic.net>