Log-Handler

 view release on metacpan or  search on metacpan

lib/Log/Handler.pm  view on Meta::CPAN

    7 | debug     |
    6 | info      |
    5 | notice    |
    4 | warning   | warn  |
    3 | error     | err   |
    2 | critical  | crit  |
    1 | alert     |
    0 | emergency | emerg |
        fatal
)\z/x;

# to convert minlevel and maxlevel to a number
our %LEVEL_BY_STRING = (
    DEBUG     =>  7,
    INFO      =>  6,
    NOTICE    =>  5,
    WARNING   =>  4,
    WARN      =>  4,
    ERROR     =>  3,
    ERR       =>  3,
    CRITICAL  =>  2,
    CRIT      =>  2,
    ALERT     =>  1,
    EMERGENCY =>  0,
    EMERG     =>  0,
    FATAL     =>  0,
);

# to iterate from minlevel to maxlevel and
# create an HoA with all active levels
our @LEVEL_BY_NUM = qw(
    EMERGENCY
    ALERT
    CRITICAL
    ERROR
    WARNING
    NOTICE
    INFO
    DEBUG
    NOTHING
);

# shortcuts for each output
our %AVAILABLE_OUTPUTS = (
    file     => "Log::Handler::Output::File",
    email    => "Log::Handler::Output::Email",
    sendmail => "Log::Handler::Output::Sendmail",
    forward  => "Log::Handler::Output::Forward",
    dbi      => "Log::Handler::Output::DBI",
    screen   => "Log::Handler::Output::Screen",
    socket   => "Log::Handler::Output::Socket",
    gearman  => "Log::Handler::Output::Gearman",
);

# use Log::Handler foo => "LOGFOO", bar => "LOGBAR";
# use Log::Handler qw/foo LOGFOO bar LOGBAR/;
sub import {
    return unless @_ > 1;
    my $class  = shift;
    my %create = @_ > 1 ? @_ : (@_, undef);
    my $caller = (caller)[0];

    foreach my $appl (keys %create) {
        my $export = $create{$appl};
        my $logger = ();

        if (!exists $LOGGER{$appl}) {
            $LOGGER{$appl} = __PACKAGE__->new();
        }

        if ($export) {
            no strict "refs";
            my $method = $caller."::".$export;
            *{$method} = sub { $LOGGER{$appl} };
        }
    }
}

sub get_logger {
    @_ == 2 || croak 'Usage: Log::Handler->get_logger($app)';
    my ($class, $logger) = @_;

    if (!exists $LOGGER{$logger}) {
        return $class->create_logger($logger);
    }

    return $LOGGER{$logger};
}

sub create_logger {
    @_ == 2 || croak 'Usage: Log::Handler->create_logger($app)';
    my ($class, $logger) = @_;

    if (!exists $LOGGER{$logger}) {
        $LOGGER{$logger} = __PACKAGE__->new();
    }

    return $LOGGER{$logger};
}

sub exists_logger {
    @_ == 2 || croak 'Usage: Log::Handler->exists_logger($app)';
    my ($class, $logger) = @_;

    if (exists $LOGGER{$logger}) {
        return 1;
    }

    return undef;
}

sub new {
    my $class = shift;

    my $self = bless {
        priority => PRIORITY,   # start priority
        levels   => { },        # outputs (Output.pm) stored by active levels
        alias    => { },        # outputs (Output.pm) stored by an alias
        outputs  => [ ],        # all Output::* objects - for flush()
        pattern  =>             # default pattern
            &Log::Handler::Pattern::get_pattern,



( run in 1.599 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )