Ja, es spült den Ausgang bei jedem Anruf. Sie können für die StreamHandler
diese im Quellcode sehen:
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)
ich nicht wirklich über die Leistung der Protokollierung dagegen hätte, zumindest nicht vor dem Profilieren und entdeckt, dass es zu einem Engpass ist. Wie auch immer, Sie können immer eine Handler
Unterklasse erstellen, die flush
bei jedem Aufruf von emit
nicht ausführt (obwohl Sie riskieren, viele Protokolle zu verlieren, wenn eine schlechte Ausnahme auftritt/der Interpreter abstürzt).
Ist 'flush()' Methode nicht von der [Vorgängerklasse] (https://docs.python.org/2/library/logging.handlers.html#module-logging.handlers) mit leerem Körper? Ist 'flush()' Methode für 'StreamHandler()' es zu überschreiben? – akhan
@akhan [Ja.] (Https://hg.python.org/cpython/file/3.5/Lib/logging/__init__.py#l958) – Bakuriu