#!/usr/local/bin/perl -w
###########################################
# Log4perl Benchmarks
# Mike Schilli, 2008 (m@perlmeister.com)
###########################################
use strict;
use Benchmark qw(timeit timestr);
use Log::Log4perl qw(:easy);
use Data::Dumper;

my $nof_tests = 100000;

test_init("DEBUG");
run("DEBUG-debug", \&debug_logger);

test_init("ERROR");
run("ERROR-debug", \&debug_logger);

test_init("DEBUG");
run("DEBUG-debug (subcat)", \&subcat_logger);

test_init("ERROR");
run("ERROR-debug (subcat)", \&subcat_logger);

###########################################
sub run {
###########################################
    my($name, $sub) = @_;

    my $t = timeit(1, $sub);
    printf "$name: %.1f per sec\n", $nof_tests/$t->[1];
}

###########################################
sub test_init {
###########################################
    my($level) = @_;

    my $conf = qq{
        log4perl.logger = $level, testapp
        log4perl.appender.testapp       = Log::Log4perl::Appender::TestBuffer
        log4perl.appender.testapp.layout= SimpleLayout
    };

    Log::Log4perl->init( \$conf );
}

###########################################
sub debug_logger {
###########################################
    my $logger = get_logger("");

    for(1..$nof_tests) {
        $logger->debug( "message" );
    }
}

###########################################
sub subcat_logger {
###########################################
    my $logger = get_logger("a.b.c.d.e.f.g.h.i.j.k");

    for(1..$nof_tests) {
        $logger->debug( "message" );
    }
}
