logging should cache LogRecord.message
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 77.2k
- Forks
- 35.9k
- Métricas de merge de PR
- Métricas de PR pendientes
Descripción
Bug report
Bug description:
logging currently does not cache LogRecord.message:
https://github.com/python/cpython/blob/0dcbc8385322ff51f7fc3e586027d880275df4fa/Lib/logging/__init__.py#L391-L401
https://github.com/python/cpython/blob/0dcbc8385322ff51f7fc3e586027d880275df4fa/Lib/logging/__init__.py#L711
Since logging caches other string-formatting related results such as LogRecord.asctime and LogRecord.exc_text, I would like to suggest:
LogRecord.getMessageshould checkself.messagefirst. If it is not computed yet, it should compute the message and set this attribute before returning.Formattershouldn't setrecord.message. It only needs to callLogRecord.getMessageto get the message.
How to reproduce
import logging
class A:
def __repr__(self):
print('repr called')
return '<A>'
logger = logging.getLogger()
logger.addHandler(logging.StreamHandler())
logger.addHandler(logging.StreamHandler())
logger.error('%r', A())
Expected output
repr called
<A>
<A>
Actual output
repr called
<A>
repr called
<A>
CPython versions tested on:
3.12
Operating systems tested on:
Linux
Linked PRs
- gh-134367
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Lee Lib/logging/init.py en las ubicaciones referenciadas de LogRecord y Formatter, y luego ejecuta la reproducción para observar llamadas repetidas a repr. Revisa el PR enlazado gh-134367 antes de comenzar. Se considera terminado cuando el ejemplo con dos handlers llama a repr una vez mientras ambos handlers producen el mensaje.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- observability
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Estancado
- Claridad
- Bien especificado
- Aptitud para principiantes
- 30/100