package Log::Lite;
use strict;
use warnings;
use POSIX qw(strftime);
use Fcntl qw(:flock);
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(logpath log);
our $VERSION = '0.04';
our $LOGPATH;
sub logpath
{
my $path = shift;
if (substr($path, 0, 1) ne '/')
{
$path = $ENV{'PWD'} ."/". $path;
}
$LOGPATH = $path;
return 1;
}
sub log
{
return 0 unless $_[0];
my $logtype = shift;
my $date_str = strftime "%Y%m%d", localtime;
my $log = strftime "%Y-%m-%d %H:%M:%S", localtime;
foreach (@_)
{
my $str = $_;
$str =~ s/[\t\r\n]//g if defined $str;
$log .= "\t".$str if defined $str;
}
$log .= "\n";
my $logpath = $LOGPATH ? $LOGPATH : 'log';
my $logfile = $logpath."/".$logtype."_".$date_str.".log";
mkdir $logpath,0755 unless -d $logpath;
open my $fh,">>",$logfile;
flock $fh,LOCK_EX;
print $fh $log;
flock $fh,LOCK_UN;
close $fh;
return 1;
}
1;
__END__
=head1 NAME
Log::Lite - Log info in local file
=head1 SYNOPSIS
use Log::Lite qw(logpath log);
logpath("/tmp/mylogpath"); #defined where log files stored (Optional)
logpath("mylogpath"); #can use relative path (Optional)
log("access", "user1", "ip1", "script"); #log in ./log/access_20110206.log
log("access", "user2", "ip2", "script"); #log in the same file as above
log("debug", "some", "debug", "info", "in", "code"); #log in ./log/debug_20110206.log
log("error", "error information"); # could accept any number of arguments
=head1 DESCRIPTION
Module Feature:
1. auto create file named by the first argument.
2. auto cut log file everyday.
3. thread safety (open-lock-write-unlock-close everytime).
=head1 METHODS
=head2 logpath($path)
Optional. Defined logpath. "./log" by default.
=head2 log($type, $content1, $content2, $content3, ...)
Write information to file.
=head1 AUTHOR
Written by ChenGang, yikuyiku.com@gmail.com
L
=head1 COPYRIGHT
Copyright (c) 2011 ChenGang.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
=head1 SEE ALSO
L, L
=cut