class ConsoleHandler(logging.StreamHandler):
"""A handler that logs to console in the sensible way.
StreamHandler can log to *one of* sys.stdout or sys.stderr.
It is more sensible to log to sys.stdout by default with only error
(logging.ERROR and above) messages going to sys.stderr. This is how
ConsoleHandler behaves.
"""
def __init__(self):
logging.StreamHandler.__init__(self)
self.stream = None # reset it; we are not going to use it anyway
def emit(self, record):
if record.levelno >= logging.ERROR:
self.__emit(record, sys.stderr)
else:
self.__emit(record, sys.stdout)
def __emit(self, record, strm):
self.stream = strm
logging.StreamHandler.emit(self, record)
def flush(self):
# Workaround a bug in logging module
# See:
# http://bugs.python.org/issue6333
if self.stream and hasattr(self.stream, 'flush') and not self.stream.closed:
logging.StreamHandler.flush(self)