Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Re^3: log4perl and efficiency

by erwan (Acolyte)
on Sep 12, 2011 at 19:03 UTC ( #925548=note: print w/ replies, xml ) Need Help??


in reply to Re^2: log4perl and efficiency
in thread log4perl and efficiency

I don't think so, I mean in the first place I got rid of this interpolation problem by testing the log level using a call to Log4perl:

if ($self->{logger}->is_trace()) { # for efficiency (not to compute th +e expression) $self->{logger}->trace("total NbObsThis $i=$nbObservedThis +NGram->[$i]; nbObsAll $i=$nbObservedAllNGrams->[$i]; total=$totalObse +rvedAll; nbExpected $i=$nbExpectedThis[$i]; chisq = $chiSquare[$i]") }

It helped indeed, but the cost of "is_trace()" was still prohibitive. Then I added a new variable $self->{disableLogger} set to true if the level is OFF (testing the log level only once) and replaced the condition with

if (!$self->{disableLogger} && $self->{logger}->is_trace()) { # test f +or efficiency (not to compute the expression) { $self->{logger}->trace("total NbObsThis $i=$nbObservedThis +NGram->[$i]; nbObsAll $i=$nbObservedAllNGrams->[$i]; total=$totalObse +rvedAll; nbExpected $i=$nbExpectedThis[$i]; chisq = $chiSquare[$i]") }

and this takes way less time (according to NYTProf). As previously said, it seems that a simple call to is_debug() (no interpolation) implies a complex (and long) computation in Log4perl.


Comment on Re^3: log4perl and efficiency
Select or Download Code
Re^4: log4perl and efficiency
by ForgotPasswordAgain (Deacon) on Sep 12, 2011 at 22:20 UTC

    Better yet, use a constant instead of a hashref lookup, and the whole if block will be obliterated at compile time when you disable debugging.

    use constant DEBUG => 0; ... if (DEBUG) { # complex logging, which disappears from the op tree }

    FWIW, my experience has been like Solo's, where you end up inadvertently evaluating the arguments to the logging methods, and this takes a lot of time (or a little bit of time in a tight loop that's called a zillion times).

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://925548]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (7)
As of 2014-08-31 09:39 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (294 votes), past polls