import logging import sys class ConsoleHandler(logging.Handler): terminator = ‘\n‘ def __init__(self, level=logging.NOTSET): super().__init__(level) def _flush(self, stream): self.acquire() try: if stream and hasattr(stream, ‘flush‘): stream.flush() finally: self.release() def emit(self, record): try: msg = self.format(record) stream = sys.stderr if record.levelname == ‘ERROR‘else sys.stdout stream.write(msg) stream.write(self.terminator) self._flush(stream) except BaseException as ex: record.msg = record.getMessage() + ‘ WriteLogException:‘ + str(ex) self.handleError(record) if __name__ == "__main__": _logger = logging.root _logger.setLevel(logging.INFO) formatter = logging.Formatter(‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘) _console_handler = ConsoleHandler(logging.INFO) _console_handler.setFormatter(formatter) _logger.addHandler(_console_handler) logging.info(‘info‘) logging.error(‘error‘)