Movatterモバイル変換


[0]ホーム

URL:


[Python-ideas] Efficient debug logging

Barrybarry at barrys-emacs.org
Tue Feb 14 17:00:31 EST 2017


> On 14 Feb 2017, at 17:39, Kyle Lahnakoski <klahnakoski at mozilla.com> wrote:>>> Can you wrap the expensive functions in lambdas? And have your logger> evaluate it, only if required?>>> debugLog( ‘info is %r’ % (lambda: expensiveFunction(),) )Interesting idea. I will bench mark and see what the cost of the lamba version is.It would still be nice to have the code look cleaner without the lambda.Barry>>>> On 2017-02-14 10:51, Barry Scott wrote:>> A common pattern I use is to have logging calls for debug and information with my applications.>> The logging calls can be separately enabled and disabled.>>>> For example:>>>> debug_log_enabled = False>> def debugLog( msg ):>>      If debug_log_enabled:>>            print( ‘Debug: %s’ % (msg,) )>>>> Then the caller can simple write:>>>> def main():>>      debugLog( ‘Start of main’ )>>>> This is fine until the evaluation of the msg becomes expensive.>>>>    debugLog( ‘info is %r’ % (expensiveFunction(),) )>>>> What would be nice is to be able to avoid evaluation the tuple of arguments if debug is>> disabled as this can be expensive. I can write this:>>>>    if debug_log_enabled:  debugLog( ‘info is %r’ % (expensiveFunction(),) )>>>> But that is a more code then I would like to write. And if the debug code is a performance problem cannot>> be left in the production code.>>>> I could combine the boolean and the log function by using a class to tidy up the implementation.>>>> class DebugLog:>>    def __init__( self, enabled = False ):>>        self.enabled = enabled>>>>    def __bool__( self ):>>        return self.enabled>>>>    def __call__( self, msg ):>>        if self.enabled: print( ‘Debug: %s’ % (msg,) )>>>> And call like this:>>>>    dbg_log = DebugLog()>>>>       If dbg_log: dbg_log( ‘a debug message’ )>>>> But I’d like to only write:>>>>    dbg_log( ‘a debug message’ )>>>> And have the evaluation of the argument skipped unless its dbg_log is enabled.>>>> I cannot see how to do this with python as it stands.>>>> Something would have to be added to allow python to short circuit the argument tuple evaluation.>>>> Maybe python can check for a special dunder on the class that know how to do this idiom, __if_true_call__?>>>> Thoughts?>>>> Barry>>>> _______________________________________________>> 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/>> _______________________________________________> 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/


More information about the Python-ideasmailing list

[8]ページ先頭

©2009-2026 Movatter.jp