[Python-ideas] Efficient debug logging

Barry Scott barry at barrys-emacs.org
Wed Feb 15 05:45:47 EST 2017

> On 15 Feb 2017, at 02:39, Kyle Lahnakoski <klahnakoski at mozilla.com> wrote:
> On 2017-02-14 19:51, Abe Dillon wrote:
>>     The point is that the cost of creating the msg argument can be very high.
>>     At the point that logging decides to skip output it is to late to save the cost of creating the arg     tuple.
>> This sounds like an optimization that's sufficiently rare and complex to warrant a custom fix or a 3rd party library.
>>     Not that it is relivent for this idea bit logging's levels are too course for logging in complete
>>     applications. The app I am working on at the moment has 20 seperate debug categories
>>     that are independently enabled.
>> Holy balls! That sounds like a tortured use of log levels!
> That's a funny expression.  :)
> I have not got to the point of 20 debug categories in a single file, but I easily have 20+ debug categories in an application.  I previously suggested wrapping the expensiveFunction in a lambda, but that is not what I do.  I prefer using explicit logging switches:
> ____if DEBUG_FEATURE_A:    
> ________debugLog(msg, expensiveFunction() )
> ____if DEBUG_FEATURE_B:    
> ________debugLog(msg2, expensiveFunction2() )
> The benefit is clarity at the expense of more lines, while still avoiding the expensiveFunction() when I can. Using switches result in a smaller log file, because logging is focused on the feature, plus, these switches can still be dynamically set from outside the module.

I would like to avoid the if so that the code is more compact if possible.

> Log "levels" never made sense to me; how can a single dimension be useful substitute for a number of binary switches?  With log "levels", you either don't have enough logging, or you drown in too much logging (or you manage a number of loggers, which is worse than logging switches).

Well said that is indeed the issue with the logger module as is.

> But to stick to the theme of language features:  I believe there is a previous thread that touches on a solution to the original posters problem:  "Alternative to PEP 532: delayed evaluation of expressions

It is not clear to me from one reading is PEP 532 will allow a class with __then__ and __else to do what I want.

Would it be something like this:
	if not debugLog and (expensive(), args())

Does debugLog get passed the tuple in the __then__?


> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20170215/7c82c545/attachment.html>

More information about the Python-ideas mailing list