| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 | """A simple log mechanism styled after PEP 282."""# The class here is styled after PEP 282 so that it could later be# replaced with a standard Python logging implementation.DEBUG = 1INFO = 2WARN = 3ERROR = 4FATAL = 5import sysclass Log:    def __init__(self, threshold=WARN):        self.threshold = threshold    def _log(self, level, msg, args):        if level not in (DEBUG, INFO, WARN, ERROR, FATAL):            raise ValueError('%s wrong log level' % str(level))        if level >= self.threshold:            if args:                msg = msg % args            if level in (WARN, ERROR, FATAL):                stream = sys.stderr            else:                stream = sys.stdout            try:                stream.write('%s\n' % msg)            except UnicodeEncodeError:                # emulate backslashreplace error handler                encoding = stream.encoding                msg = msg.encode(encoding, "backslashreplace").decode(encoding)                stream.write('%s\n' % msg)            stream.flush()    def log(self, level, msg, *args):        self._log(level, msg, args)    def debug(self, msg, *args):        self._log(DEBUG, msg, args)    def info(self, msg, *args):        self._log(INFO, msg, args)    def warn(self, msg, *args):        self._log(WARN, msg, args)    def error(self, msg, *args):        self._log(ERROR, msg, args)    def fatal(self, msg, *args):        self._log(FATAL, msg, args)_global_log = Log()log = _global_log.logdebug = _global_log.debuginfo = _global_log.infowarn = _global_log.warnerror = _global_log.errorfatal = _global_log.fataldef set_threshold(level):    # return the old threshold for use from tests    old = _global_log.threshold    _global_log.threshold = level    return olddef set_verbosity(v):    if v <= 0:        set_threshold(WARN)    elif v == 1:        set_threshold(INFO)    elif v >= 2:        set_threshold(DEBUG)
 |