Log::Handler::Levels - All levels for Log::Handler.


Log-Handler documentation Contained in the Log-Handler distribution.

Index


Code Index:

NAME

Top

Log::Handler::Levels - All levels for Log::Handler.

DESCRIPTION

Top

Base class for Log::Handler.

Just for internal usage and documentation.

METHODS

Top

Default log level

debug()
info()
notice()
warning(), warn()
error(), err()
critical(), crit()
alert()
emergency(), emerg()

Checking for active levels

is_debug()
is_info()
is_notice()
is_warning(), is_warn()
is_error(), is_err()
is_critical(), is_crit()
is_alert()
is_emergency(), is_emerg()

Special level

fatal()

Alternative for the levels critical - emergency.

is_fatal()

Check if one of the levels critical - emergency is active.

Special methods

trace()

This method is very useful if you want to add a full backtrace to your message. Maybe you want to intercept unexpected errors and want to know who called die().

    $SIG{__DIE__} = sub { $log->trace(emergency => @_) };

By default the backtrace is logged as level debug.

    # would log with the level debug
    $log->trace('who called who');

If you want to log with another level then you can pass the level as first argument:

    $log->trace(info => $message);

dump()

If you want to dump something then you can use dump(). The default level is debug.

    my %hash = (foo => 1, bar => 2);

    $log->dump(\%hash);

If you want to log with another level then you can pass the level as first argument:

    $log->dump($level => \%hash);

die()

This method logs the message to the output and then call Carp::croak() with the level emergency by default.

    $log->die('an emergency error here');

If you want to log with another level, then you can pass the level as first argument:

    $log->die(fatal => 'an emergency error here');

log()

With this method it's possible to log messages with the log level as first argument:

    $log->log(info => 'an info message');

Is the same like

    $log->info('an info message');

and

    $log->log('an info message');

If you log without a level then the default level is info.

PREREQUISITES

Top

    Carp
    Data::Dumper

EXPORTS

Top

No exports.

REPORT BUGS

Top

Please report all bugs to <jschulz.cpan(at)bloonix.de>.

If you send me a mail then add Log::Handler into the subject.

AUTHOR

Top

Jonny Schulz <jschulz.cpan(at)bloonix.de>.

COPYRIGHT

Top


Log-Handler documentation Contained in the Log-Handler distribution.

package Log::Handler::Levels;

use strict;
use warnings;
use Carp;
use Data::Dumper;

our $VERSION = '0.06';

my %LEVELS_BY_ROUTINE = (
    debug     => 'DEBUG',
    info      => 'INFO',
    notice    => 'NOTICE',
    warning   => 'WARNING',
    warn      => 'WARNING',
    error     => 'ERROR',
    err       => 'ERROR',
    critical  => 'CRITICAL',
    crit      => 'CRITICAL',
    alert     => 'ALERT',
    emergency => 'EMERGENCY',
    emerg     => 'EMERGENCY',
    fatal     => 'FATAL',
);

foreach my $routine (keys %LEVELS_BY_ROUTINE) {
    my $level = $LEVELS_BY_ROUTINE{$routine};

    {   # start "no strict 'refs'" block
        no strict 'refs';

        # --------------------------------------------------------------
        # Creating the syslog level methods
        # --------------------------------------------------------------

        *{"$routine"} = sub {
            use strict 'refs';
            my $self   = shift;
            my $levels = $self->{levels};
            my $errors = ();

            if ( !$levels->{$level} ) {
                return 1;
            }

            foreach my $output ( @{$levels->{$level}} ) {
                if ( !$output->log($level, @_) ) {
                    if ( defined $errors ) {
                        $errors .= '; ' . $output->errstr;
                    } else {
                        $errors = $output->errstr;
                    }
                }
            }

            return defined $errors ? $self->_raise_error($errors) : 1;
        };

        # --------------------------------------------------------------
        # Creating the is_<level> methods
        # --------------------------------------------------------------

        *{"is_$routine"} = sub {
            use strict 'refs';
            my $self = shift;
            my $levels = $self->{levels};
            return $levels->{$level} ? 1 : 0;
        };

    } # end "no strict 'refs'" block
}

sub log {
    my $self  = shift;
    my $level = @_ > 1 ? lc(shift) : 'info';
    if (!exists $LEVELS_BY_ROUTINE{$level}) {
        $level = 'info';
    }
    local $Log::Handler::CALLER_LEVEL = 1;
    return $self->$level(@_);
}

sub trace {
    my $self  = shift;
    my $level = @_ > 1 ? lc(shift) : 'debug';
    if (!exists $LEVELS_BY_ROUTINE{$level}) {
        $level = 'debug';
    }
    local $Log::Handler::CALLER_LEVEL = 1;
    local $Log::Handler::TRACE = 1;
    return $self->$level(@_);
}

sub die {
    my $self  = shift;
    my $level = @_ > 1 ? lc(shift) : 'emergency';
    if (!exists $LEVELS_BY_ROUTINE{$level}) {
        $level = 'emergency';
    }
    local $Log::Handler::CALLER_LEVEL = 1;
    my @caller = caller;
    $self->$level(@_, "at line $caller[2]");
    Carp::croak @_;
};

sub dump {
    my $self  = shift;
    my $level = @_ > 1 ? lc(shift) : 'debug';
    if (!exists $LEVELS_BY_ROUTINE{$level}) {
        $level = 'debug';
    }
    local $Log::Handler::CALLER_LEVEL = 1;
    return $self->$level(Dumper(@_));
}

1;