write values modules logger log python performance logging flush

values - ¿El registro de Python limpia todos los registros?



python logging level values (1)

Cuando escribo un registro en un archivo usando el registro de módulos estándar, ¿se vaciará cada registro en el disco por separado? Por ejemplo, ¿el código siguiente vaciará el registro 10 veces?

logging.basicConfig(level=logging.DEBUG, filename=''debug.log'') for i in xrange(10): logging.debug("test")

si es así, ¿se ralentizará?


Sí, vacía la salida en cada llamada. Puedes ver esto en el código fuente de StreamHandler :

def flush(self): """ Flushes the stream. """ self.acquire() try: if self.stream and hasattr(self.stream, "flush"): self.stream.flush() finally: self.release() def emit(self, record): """ Emit a record. If a formatter is specified, it is used to format the record. The record is then written to the stream with a trailing newline. If exception information is present, it is formatted using traceback.print_exception and appended to the stream. If the stream has an ''encoding'' attribute, it is used to determine how to do the output to the stream. """ try: msg = self.format(record) stream = self.stream stream.write(msg) stream.write(self.terminator) self.flush() # <--- except (KeyboardInterrupt, SystemExit): #pragma: no cover raise except: self.handleError(record)

Realmente no me importaría sobre el rendimiento del registro, al menos no antes del perfilado y descubriendo que es un cuello de botella. De todos modos, siempre puedes crear una subclase Handler que no se ejecute en flush en cada llamada para emit (aunque correrás el riesgo de perder muchos registros si se produce una mala excepción / el intérprete falla).