Ref-strings in logging messages (was: Performance issue with CPython 3.10 + Cython)

Weatherby,Gerard gweatherby at uchc.edu
Sat Oct 8 06:50:51 EDT 2022


Logging does support passing a callable, if indirectly. It only calls __str__ on the object passed if debugging is enabled.

class Defer:

    def __init__(self,fn):
        self.fn = fn

    def __str__(self):
        return self.fn()

def some_expensive_function():
    return "hello"

logging.basicConfig()
logging.debug(Defer(some_expensive_function))


From: Python-list <python-list-bounces+gweatherby=uchc.edu at python.org> on behalf of Barry <barry at barrys-emacs.org>
Date: Friday, October 7, 2022 at 1:30 PM
To: MRAB <python at mrabarnett.plus.com>
Cc: python-list at python.org <python-list at python.org>
Subject: Re: Ref-strings in logging messages (was: Performance issue with CPython 3.10 + Cython)
*** Attention: This is an external email. Use caution responding, opening attachments or clicking on links. ***

> On 7 Oct 2022, at 18:16, MRAB <python at mrabarnett.plus.com> wrote:
>
> On 2022-10-07 16:45, Skip Montanaro wrote:
>>> On Fri, Oct 7, 2022 at 9:42 AM Andreas Ames <andreas.0815.qwertz at gmail.com>
>>> wrote:
>>> 1. The culprit was me. As lazy as I am, I have used f-strings all over the
>>> place in calls to `logging.logger.debug()` and friends, evaluating all
>>> arguments regardless of whether the logger was enabled or not.
>>>
>> I thought there was some discussion about whether and how to efficiently
>> admit f-strings to the logging package. I'm guessing that's not gone
>> anywhere (yet).
> Letting you pass in a callable to call might help because that you could use lambda.

Yep, that’s the obvious way to avoid expensive log data generation.
Would need logging module to support that use case.

Barry

> --
> https://urldefense.com/v3/__https://mail.python.org/mailman/listinfo/python-list__;!!Cn_UX_p3!mrESxAj9YCHsdtNAfkNiY-Zf6U3WTIqaNrgBmbw1ELlQy51ilob43dD0ONsqvg4a94MEdOdwomgyqfyABbvRnA$<https://urldefense.com/v3/__https:/mail.python.org/mailman/listinfo/python-list__;!!Cn_UX_p3!mrESxAj9YCHsdtNAfkNiY-Zf6U3WTIqaNrgBmbw1ELlQy51ilob43dD0ONsqvg4a94MEdOdwomgyqfyABbvRnA$>
>

--
https://urldefense.com/v3/__https://mail.python.org/mailman/listinfo/python-list__;!!Cn_UX_p3!mrESxAj9YCHsdtNAfkNiY-Zf6U3WTIqaNrgBmbw1ELlQy51ilob43dD0ONsqvg4a94MEdOdwomgyqfyABbvRnA$<https://urldefense.com/v3/__https:/mail.python.org/mailman/listinfo/python-list__;!!Cn_UX_p3!mrESxAj9YCHsdtNAfkNiY-Zf6U3WTIqaNrgBmbw1ELlQy51ilob43dD0ONsqvg4a94MEdOdwomgyqfyABbvRnA$>


More information about the Python-list mailing list