> So I guess what I'm saying is that the final thing that would stop me from > using Log::Any "everywhere" (meaning also in performance-critical code) is > the overhead for the common (production) case of logging being entirely > disabled. How about providing all three methods of checking as part of the > API? > > $log->debug(...) if $log->is_debug(); # method > $log->debug(...) if Log::Any::is_debug(); # sub > $log->debug(...) if $Log::Any::Is_Debug; # var
Good point. The last two need to be tweaked so that we can assign different logging levels and/or destinations to different loggers - e.g. to turn on just Rose::DB debug logging without a flood from other modules. (See log4perl). How about this: use Log::Abstract qw($log $log_is_debug); $log->debug(...) if $log_is_debug; which translates to something like use Log::Abstract; my $log = Log::Abstract->get_logger (category => __PACKAGE__, is_debug_flag => \my $log_is_debug); $log->debug(...) if $log_is_debug; Now $log_is_debug, like $log, is class/category specific. Note that with either syntax, Log::Abstract is able to keep track of all the $log_is_debug variables and update them at runtime when something happens in the log framework to change log levels (e.g. log4perl reloading configuration). Assuming log level changes happen infrequently, this should yield good performance even when logging is turned on.