Crane
view release on metacpan or search on metacpan
lib/Crane/Logger.pm view on Meta::CPAN
if ( $LOG_LEVEL >= $LOG_WARNING ) {
write_to_fh($ERRORS_FH, @_);
}
return;
}
sub log_info {
if ( $LOG_LEVEL >= $LOG_INFO ) {
write_to_fh($MESSAGES_FH, @_);
}
return;
}
sub log_debug {
if ( $LOG_LEVEL >= $LOG_DEBUG ) {
write_to_fh($MESSAGES_FH, @_);
}
return;
}
sub log_verbose {
if ( $LOG_LEVEL >= $LOG_VERBOSE ) {
write_to_fh($MESSAGES_FH, @_);
}
return;
}
sub write_to_fh {
my ( $fh, @messages ) = @_;
if ( not defined $fh ) {
confess('Invalid file handle');
}
local $Data::Dumper::Indent = 1;
local $Data::Dumper::Purity = 0;
local $Data::Dumper::Terse = 1;
flock $fh, LOCK_EX;
my $datetime = strftime(q{%Y-%m-%d %H:%M:%S %z %s}, localtime);
foreach my $message ( @messages ) {
foreach my $line ( split m{$INPUT_RECORD_SEPARATOR}osi, ( not defined $message or ref $message ) ? Dumper($message) : $message ) {
print { $fh } "[$datetime] $line\n" or confess($OS_ERROR);
}
}
flock $fh, LOCK_UN;
return;
}
1;
=head1 NAME
Crane::Logger - Log manager
=head1 SYNOPSIS
use Crane::Logger;
log_fatal('Fatal message', caller);
log_error('Error message');
log_warning('Warning message', $ref);
log_info("First line\nSecond line\n");
log_debug($ref);
log_verbose('First line', 'Second line');
=head1 DESCRIPTION
Simple log manager with six log levels. Supports auto split messages by "end of
line" and dump references using L<Data::Dumper|Data::Dumper>.
=head2 Log entry
Each log entry looks like ...
[2013-12-30 02:36:22 +0400 1388356582] Hello, world!
... and contains:
=over
=item Date
Date in ISO format: YYYY-MM-DD.
2013-12-30
=item Time
Time in ISO format: hh:mm:ss.
02:36:22
=item Time zone
Time zone in ISO format: ±hhmm.
+0400
=item Unix time
Unix time.
1388356582
=item Message
Log message.
Hello, world!
=back
In case of log reference, each line will contain "header" (date and times):
[2013-12-30 02:36:22 +0400 1388356582] {
[2013-12-30 02:36:22 +0400 1388356582] 'room' => 'Sitting room',
[2013-12-30 02:36:22 +0400 1388356582] 'colors' => [
[2013-12-30 02:36:22 +0400 1388356582] 'orange',
[2013-12-30 02:36:22 +0400 1388356582] 'purple',
[2013-12-30 02:36:22 +0400 1388356582] 'black'
[2013-12-30 02:36:22 +0400 1388356582] ]
[2013-12-30 02:36:22 +0400 1388356582] }
=head2 Log levels
=over
( run in 0.875 second using v1.01-cache-2.11-cpan-71847e10f99 )