estoy usando módulo de registro estándar de Python en mi solicitud de pitón:registrador Lazy evaluación cadena de mensaje
import logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger("log") while True: logger.debug('Stupid log message " + ' '.join([str(i) for i in range(20)])) # Do something
La cuestión es que, si bien el nivel de depuración no se permite, que el mensaje de registro estúpida es evaluado en cada repetición del bucle, que perjudica el rendimiento.
¿Hay alguna solución para esto?
En C++ tenemos log4cxx
paquete que proporciona macros de la siguiente manera:
LOG4CXX_DEBUG(logger, messasage)
que evalúa de manera efectiva a
if (log4cxx::debugEnabled(logger)) { log4cxx.log(logger,log4cxx::LOG4CXX_DEBUG, message) }
Pero dado que no existen macros en Python (que yo sepa), si hay una manera eficiente para hacer el registro?
Simple y eficiente. Me gusta eso. Esto debería ganar más votos ascendentes. – Rockallite
La eficiencia depende del caso en cuestión y siempre debe comparar su propio escenario. En mi caso, el registro lento no requería ningún argumento, pero podía recopilar cosas de la clase al invocar el '__str__'. En esencia, obtuve casi el mismo resultado. Vea mi comentario [aquí] (https://gist.github.com/schnittstabil/9372911#gistcomment-1910973) – guyarad
@guyarad: También se ha tomado el tiempo necesario para crear instancias 'lazyjoin' en la cuenta. Ver también mi respuesta a [Python: cómo hacer un registro de depuración lento] (http://stackoverflow.com/questions/21377020/python-how-to-do-lazy-debug-logging/22204021#22204021). – schnittstabil