mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-07 10:14:46 -04:00
py3: Fix logging not flushing
Because we use sys.stdout.buffer, automatic line-wrapping does not work. So instead issue a manual flush after every log call.
This commit is contained in:
parent
d2bcc94034
commit
14a8056a3c
@ -152,10 +152,10 @@ class Log(object):
|
|||||||
default_output = ANSIStream()
|
default_output = ANSIStream()
|
||||||
self.outputs = [default_output]
|
self.outputs = [default_output]
|
||||||
|
|
||||||
self.debug = partial(self.prints, DEBUG)
|
self.debug = partial(self.print_with_flush, DEBUG)
|
||||||
self.info = partial(self.prints, INFO)
|
self.info = partial(self.print_with_flush, INFO)
|
||||||
self.warn = self.warning = partial(self.prints, WARN)
|
self.warn = self.warning = partial(self.print_with_flush, WARN)
|
||||||
self.error = partial(self.prints, ERROR)
|
self.error = partial(self.print_with_flush, ERROR)
|
||||||
|
|
||||||
def prints(self, level, *args, **kwargs):
|
def prints(self, level, *args, **kwargs):
|
||||||
if level < self.filter_level:
|
if level < self.filter_level:
|
||||||
@ -163,13 +163,20 @@ class Log(object):
|
|||||||
for output in self.outputs:
|
for output in self.outputs:
|
||||||
output.prints(level, *args, **kwargs)
|
output.prints(level, *args, **kwargs)
|
||||||
|
|
||||||
|
def print_with_flush(self, level, *args, **kwargs):
|
||||||
|
if level < self.filter_level:
|
||||||
|
return
|
||||||
|
for output in self.outputs:
|
||||||
|
output.prints(level, *args, **kwargs)
|
||||||
|
self.flush()
|
||||||
|
|
||||||
def exception(self, *args, **kwargs):
|
def exception(self, *args, **kwargs):
|
||||||
limit = kwargs.pop('limit', None)
|
limit = kwargs.pop('limit', None)
|
||||||
self.prints(ERROR, *args, **kwargs)
|
self.print_with_flush(ERROR, *args, **kwargs)
|
||||||
self.prints(DEBUG, traceback.format_exc(limit))
|
self.print_with_flush(DEBUG, traceback.format_exc(limit))
|
||||||
|
|
||||||
def __call__(self, *args, **kwargs):
|
def __call__(self, *args, **kwargs):
|
||||||
self.prints(INFO, *args, **kwargs)
|
self.info(*args, **kwargs)
|
||||||
|
|
||||||
def __enter__(self):
|
def __enter__(self):
|
||||||
self.orig_filter_level = self.filter_level
|
self.orig_filter_level = self.filter_level
|
||||||
@ -207,11 +214,15 @@ class ThreadSafeLog(Log):
|
|||||||
with self._lock:
|
with self._lock:
|
||||||
Log.prints(self, *args, **kwargs)
|
Log.prints(self, *args, **kwargs)
|
||||||
|
|
||||||
|
def print_with_flush(self, *args, **kwargs):
|
||||||
|
with self._lock:
|
||||||
|
Log.print_with_flush(self, *args, **kwargs)
|
||||||
|
|
||||||
def exception(self, *args, **kwargs):
|
def exception(self, *args, **kwargs):
|
||||||
limit = kwargs.pop('limit', None)
|
limit = kwargs.pop('limit', None)
|
||||||
with self._lock:
|
with self._lock:
|
||||||
Log.prints(self, ERROR, *args, **kwargs)
|
Log.print_with_flush(self, ERROR, *args, **kwargs)
|
||||||
Log.prints(self, self.exception_traceback_level, traceback.format_exc(limit))
|
Log.print_with_flush(self, self.exception_traceback_level, traceback.format_exc(limit))
|
||||||
|
|
||||||
|
|
||||||
class ThreadSafeWrapper(Log):
|
class ThreadSafeWrapper(Log):
|
||||||
@ -225,6 +236,10 @@ class ThreadSafeWrapper(Log):
|
|||||||
with self._lock:
|
with self._lock:
|
||||||
Log.prints(self, *args, **kwargs)
|
Log.prints(self, *args, **kwargs)
|
||||||
|
|
||||||
|
def print_with_flush(self, *args, **kwargs):
|
||||||
|
with self._lock:
|
||||||
|
Log.print_with_flush(self, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class GUILog(ThreadSafeLog):
|
class GUILog(ThreadSafeLog):
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user