| Mojolicious documentation | Contained in the Mojolicious distribution. |
Mojo::Log - Simple Logger For Mojo
use Mojo::Log;
# Create a logging object that will log to STDERR by default
my $log = Mojo::Log->new;
# Customize the log location and minimum log level
my $log = Mojo::Log->new(
path => '/var/log/mojo.log',
level => 'warn',
);
$log->debug("Why isn't this working?");
$log->info("FYI: it happened again");
$log->warn("This might be a problem");
$log->error("Garden variety error");
$log->fatal("Boom!");
Mojo::Log implements the following attributes.
handlemy $handle = $log->handle; $log = $log->handle(IO::File->new);
Logfile handle.
level my $level = $log->level;
$log = $log->level('debug');
Log level.
path my $path = $log->path
$log = $log->path('/var/log/mojo.log');
Logfile path.
Mojo::Log inherits all methods from Mojo::Base and implements the following new ones.
debug $log = $log->debug('You screwed up, but that is ok');
Log debug message.
error $log = $log->error('You really screwed up this time');
Log error message.
fatal $log = $log->fatal('Its over...');
Log fatal message.
info $log = $log->info('You are bad, but you prolly know already');
Log info message.
is_level my $is = $log->is_level('debug');
Check log level.
is_debugmy $is = $log->is_debug;
Check for debug log level.
is_errormy $is = $log->is_error;
Check for error log level.
is_fatalmy $is = $log->is_fatal;
Check for fatal log level.
is_infomy $is = $log->is_info;
Check for info log level.
is_warnmy $is = $log->is_warn;
Check for warn log level.
log$log = $log->log(debug => 'This should work');
Log a message.
warn $log = $log->warn('Dont do that Dave...');
Log warn message.
Mojolicious, Mojolicious::Guides, http://mojolicio.us.
| Mojolicious documentation | Contained in the Mojolicious distribution. |
package Mojo::Log; use Mojo::Base -base; use Carp 'croak'; use Fcntl ':flock'; use IO::File; has handle => sub { my $self = shift; # Need a log file unless ($self->path) { binmode STDERR, ':utf8'; return \*STDERR; } # Open my $file = IO::File->new; my $path = $self->path; $file->open(">> $path") or croak qq/Can't open log file "$path": $!/; binmode $file, ':utf8'; $file; }; has level => 'debug'; has 'path'; # Supported log level my $LEVEL = {debug => 1, info => 2, warn => 3, error => 4, fatal => 5}; # "Yes, I got the most! I win X-Mas!" sub debug { shift->log('debug', @_) } sub error { shift->log('error', @_) } sub fatal { shift->log('fatal', @_) } sub info { shift->log('info', @_) } sub is_debug { shift->is_level('debug') } sub is_error { shift->is_level('error') } sub is_fatal { shift->is_level('fatal') } sub is_info { shift->is_level('info') } sub is_level { my ($self, $level) = @_; return unless $level; $level = lc $level; my $current = $ENV{MOJO_LOG_LEVEL} || $self->level; $LEVEL->{$level} >= $LEVEL->{$current}; } sub is_warn { shift->is_level('warn') } # "If The Flintstones has taught us anything, # it's that pelicans can be used to mix cement." sub log { my ($self, $level, @msgs) = @_; # Check log level $level = lc $level; return $self unless $level && $self->is_level($level); # Caller my ($pkg, $line) = (caller())[0, 2]; ($pkg, $line) = (caller(1))[0, 2] if $pkg eq ref $self; # Lock my $handle = $self->handle; flock $handle, LOCK_EX; # Log messages my $time = localtime(time); my $msgs = join "\n", map { utf8::decode $_ unless utf8::is_utf8 $_; $_ } @msgs; $handle->syswrite("$time $level $pkg:$line [$$]: $msgs\n"); # Unlock flock $handle, LOCK_UN; $self; } sub warn { shift->log('warn', @_) } 1; __END__