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.
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.