>> local $Log::Log4perl::caller_depth = >> $Log::Log4perl::caller_depth + 2; > > I should have said I knew I could do this but a) there > are an awful lot of methods b) when logging is not > enabled each method has the overhead of the above > statement for nothing.
Well, that's true, but the overhead is dwarfed by what it's already costing you to subclass the DBI methods. On my box I can process 196,002 child-method calls per second, and that decreases to 176,991 calls per second when adding the manipulation of $caller_depth. On the other hand, calling the parent method would have run at 1,689,189 per second. And you could probably improve the performance of manipulating $caller_depth by skipping it unless $h->{logger}->is_debug is true. call_local: 3 wallclock secs ( 1.92 usr + 0.00 sys = 1.92 CPU) @ 2604166.67/s (n=5000000) child_with_local: 29 wallclock secs (28.19 usr + 0.06 sys = 28.25 CPU) @ 176991.15/s (n=5000000) childmethod: 26 wallclock secs (25.47 usr + 0.04 sys = 25.51 CPU) @ 196001.57/s (n=5000000) supermethod: 3 wallclock secs ( 2.95 usr + 0.01 sys = 2.96 CPU) @ 1689189.19/s (n=5000000) ---------------- use strict; use Benchmark; $Log::Log4perl::caller_depth = 0; { package testpackage; sub runmethod {} } { package child::testpackage; push our @ISA, 'testpackage'; sub runmethod { my($sth, @args) = @_; my $h = $sth->{private_DBIx_Log4perl}; my $res = $sth->SUPER::runmethod(@args); } #the same thing, but with a local() call added sub runmethod_with_local { my($sth, @args) = @_; local $Log::Log4perl::caller_depth = $Log::Log4perl::caller_depth + 2 if ; my $h = $sth->{private_DBIx_Log4perl}; my $res = $sth->SUPER::runmethod(@args); } } my $dbh = {}; bless $dbh, 'testpackage'; my $dbhX = {private_DBIX_Log4perl => 1}; bless $dbhX, 'child::testpackage'; my @args = (1,2,3); timethese( 5000000, { supermethod => sub { $dbh->runmethod(@args) }, childmethod => sub { $dbhX->runmethod(@args) }, child_with_local => sub { $dbhX->runmethod_with_local(@args) }, call_local => sub { local $Log::Log4perl::caller_depth = $Log::Log4perl::caller_depth + 2; }, }); ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ log4perl-devel mailing list log4perl-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/log4perl-devel