mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +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 |