package Log; use base Bbs; use strict; sub format {my $d = $_[1] || $_[0]->conf('delimiter'); my $time = $_[2] || $_[0]->from('time'); my $spid = $_[3] || $_[0]->cookie('SPID') || $_[0]->get_spid(); my $host = $_[4] || $_[0]->get_host(); $host =~ s/\[.*\]//; "$time$d$spid$d$host";} sub read {my $log = $_[1]; my $n = $_[2] || 'log'; my @list; open( FH, "<$log" ) || return; flock FH, 2; chomp, $list[$.-1] = $_ while ; close FH; $_[0]->list( $n => \@list ); \@list;} sub write {my $log = $_[1]; my $limit = $_[2]; my $list = $_[3] || $_[0]->list('log'); my $str = $_[4]; my $i = 0; open FH, "+<$log"; flock FH, 2; local $\="\n"; if($limit){ seek FH, 0, 0; unshift @$list, $str; while ($_=$$list[$i++]) {last if $i > $limit;print FH;}}else{seek FH, 0, 2; print FH $str;} truncate FH, tell FH; close FH; $_[0];} 1; __END__