Log-Mini/lib/Log/Mini/Logger/Base.pm
Denis Fedoseev 56215cf0d3 small fixes
2023-03-17 21:53:33 +03:00

84 lines
1.4 KiB
Perl

package Log::Mini::Logger::Base;
use strict;
use warnings;
use Carp qw(croak);
use List::Util qw(first);
use Time::Moment;
my $LEVELS = {
error => 1,
warn => 2,
info => 3,
debug => 4,
trace => 5,
};
sub new
{
my $class = shift;
my (%params) = @_;
my $self = {};
bless $self, $class;
$self->{'level'} = $params{'level'} || 'error';
return $self;
}
sub set_level
{
my $self = shift;
my ($new_level) = @_;
croak('Unknown log level')
unless $LEVELS->{$new_level};
$self->{'level'} = $new_level;
return 1;
}
sub level
{
my $self = shift;
return $self->{level} || 'error';
}
sub log { return shift->_log(shift, @_) }
sub info { return shift->_log('info', @_) }
sub error { return shift->_log('error', @_) }
sub warn { return shift->_log('warn', @_) }
sub debug { return shift->_log('debug', @_) }
sub trace { return shift->_log('trace', @_) }
sub _log
{
my $self = shift;
my $level = shift;
my $message = shift;
return if $LEVELS->{$level} > $LEVELS->{$self->{'level'}};
my $time = $self->_getCurrentTime();
my $text = sprintf("%s [%s] %s\n", $time, $level, $message);
$text = sprintf($text, @_) if (@_);
$self->_print($text);
return 1;
}
sub _print { croak 'Not implemented!' }
sub _getCurrentTime
{
return Time::Moment->now->strftime('%Y-%m-%d %T%3f');
}
1;