mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	
		
			
	
	
		
			64 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			64 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								"""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 = 1
							 | 
						||
| 
								 | 
							
								INFO = 2
							 | 
						||
| 
								 | 
							
								WARN = 3
							 | 
						||
| 
								 | 
							
								ERROR = 4
							 | 
						||
| 
								 | 
							
								FATAL = 5
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import sys
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class 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.log
							 | 
						||
| 
								 | 
							
								debug = _global_log.debug
							 | 
						||
| 
								 | 
							
								info = _global_log.info
							 | 
						||
| 
								 | 
							
								warn = _global_log.warn
							 | 
						||
| 
								 | 
							
								error = _global_log.error
							 | 
						||
| 
								 | 
							
								fatal = _global_log.fatal
							 |