Again, no real need of the if as the second arg is just a subroutine that is not actually executed unless is_error is true...  

From the doc:
"The to-be-logged message passed to all of the functions described above can consist of an arbitrary number of arguments, which the logging functions just chain together to a single string"

Also:
"If you're afraid that generating the parameters to the logging function is fairly expensive, use closures"
http://search.cpan.org/~mschilli/Log-Log4perl-1.42/lib/Log/Log4perl.pm#Penalties