Does python logging flush every log? Does python logging flush every log? python python

Does python logging flush every log?


Yes, it does flush the output at every call. You can see this in the source code for the 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)

I wouldn't really mind about the performance of logging, at least not before profiling and discovering that it is a bottleneck. Anyway you can always create a Handler subclass that doesn't perform flush at every call to emit(even though you will risk to lose a lot of logs if a bad exception occurs/the interpreter crashes).