A high performance Perl logging module
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib/Log
t
.gitignore
Changes
LICENSE
README
README.md
README.pod
cpanfile
dist.ini

README.md

NAME

Log::Declare - A high performance Perl logging module

OVERVIEW

Creates syntactic sugar for logging using categories with sprintf support.

Complex logging statements can be written without impacting on performance when those log levels are disabled.

For example, using a typical logger, this would incur a penalty even if the logging is disabled:

$self->log(Dumper $myobject);

but with Log::Declare we incur almost no performance penalty if 'info' level is disabled, since the following log statement:

info Dumper $myobject [mycategory];

gets rewritten as:

info && $Log::Declare::logger->log('info', ['mycategory'], Dumper $myobject);

which means if 'info' returns 0, nothing else gets evaluated.

SYNOPSIS

use Log::Declare;
use Log::Declare qw/ :nosyntax /; # disables syntactic sugar
use Log::Declare qw/ :nowarn :noerror ... /; # disables specific sugar

# with syntactic sugar
debug "My debug message" [category];
error "My error message: %s", $error [category1, category2];

# auto-dump variables with Data::Dumper
debug "Using sprintf format: %s", d:$error [category];

# auto-ref variables with ref()
debug "Using sprintf format: %s", r:$error [category];

# capture other loggers (loses Log::Declare performance)
Log::Declare->capture('Test::Logger::log');
Log::Declare->capture('Test::Logger::log' => sub {
    my ($logger, @args) = @_;
    # manipulate logger args here
    return @args;
});

NAMESPACES

If you're using a namespace-aware logger, Log::Declare can use your logger's namespacing to determine log levels. For example:

$Log::Declare::levels{'debug'} = sub {
    Log::Log4perl->get_logger(caller)->is_debug;
};