I’m currently working on some Perl code for a change, and as part of a refactor I’ve added log4perl in to support my debugging.
I tend to overuse Data::Dumper
as it’s so useful for seeing what is going on inside an object, and I had been passing the results directly to log4perl. This is actually very inefficient if I changed my logging level to turn off the dumps, as Dumper
would still run, but the results would just be ignored.
Thankfully log4perl supports filters, so I can use this to defer the Dumper
operation until it actually needs to be output.
get_logger(ref $self)->trace({ filter => &Data::Dumper::Dumper, value => $data });
In the above example, I’m getting the singleton instance of log4perl for my current class, then calling trace, and saying I’d like the $data passed through Data::Dumper::Dumper
. This will only be filtered if I have trace level monitoring enabled, if not it will be silently ignored and not executed, saving me valuable resources.