forked from ungleich-public/cdist
		
	Define better warning facility.
This commit is contained in:
		
					parent
					
						
							
								01ca5910ec
							
						
					
				
			
			
				commit
				
					
						c63ab44c9c
					
				
			
		
					 6 changed files with 68 additions and 17 deletions
				
			
		|  | @ -20,9 +20,9 @@ | ||||||
| # | # | ||||||
| 
 | 
 | ||||||
| import os | import os | ||||||
| import subprocess |  | ||||||
| import hashlib | import hashlib | ||||||
| 
 | 
 | ||||||
|  | import cdist.log | ||||||
| import cdist.version | import cdist.version | ||||||
| 
 | 
 | ||||||
| VERSION = cdist.version.VERSION | VERSION = cdist.version.VERSION | ||||||
|  |  | ||||||
|  | @ -17,13 +17,20 @@ EPILOG = "Get cdist at http://www.nico.schottelius.org/software/cdist/" | ||||||
| parser = None | parser = None | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | _verbosity_level_off = -2 | ||||||
|  | _verbosity_level_debug = 3 | ||||||
| _verbosity_level = { | _verbosity_level = { | ||||||
|     0: logging.ERROR, |     _verbosity_level_off: logging.OFF, | ||||||
|     1: logging.WARNING, |     -1: logging.ERROR, | ||||||
|     2: logging.INFO, |     0: logging.WARNING, | ||||||
|  |     1: logging.INFO, | ||||||
|  |     2: logging.VERBOSE, | ||||||
|  |     3: logging.DEBUG, | ||||||
|  |     4: logging.TRACE, | ||||||
| } | } | ||||||
|  | # All verbosity levels above 4 are TRACE. | ||||||
| _verbosity_level = collections.defaultdict( | _verbosity_level = collections.defaultdict( | ||||||
|     lambda: logging.DEBUG, _verbosity_level) |     lambda: logging.TRACE, _verbosity_level) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def add_beta_command(cmd): | def add_beta_command(cmd): | ||||||
|  | @ -83,13 +90,18 @@ def get_parsers(): | ||||||
|             '-d', '--debug', |             '-d', '--debug', | ||||||
|             help=('Set log level to debug (deprecated, use -vvv instead)'), |             help=('Set log level to debug (deprecated, use -vvv instead)'), | ||||||
|             action='store_true', default=False) |             action='store_true', default=False) | ||||||
|  |     parser['loglevel'].add_argument( | ||||||
|  |             '-q', '--quiet', | ||||||
|  |             help='Quiet mode: disables logging, including WARNING and ERROR', | ||||||
|  |             action='store_true', default=False) | ||||||
|     parser['loglevel'].add_argument( |     parser['loglevel'].add_argument( | ||||||
|             '-v', '--verbose', |             '-v', '--verbose', | ||||||
|             help=('Increase the verbosity level. Every instance of -v ' |             help=('Increase the verbosity level. Every instance of -v ' | ||||||
|                   'increments the verbosity level by one. Its default value ' |                   'increments the verbosity level by one. Its default value ' | ||||||
|                   'is 0. There are 4 levels of verbosity. The order of levels ' |                   'is 0 which includes ERROR and WARNING levels. ' | ||||||
|                   'from the lowest to the highest are: ERROR (0), ' |                   'The levels, in order from the lowest to the highest, are: ' | ||||||
|                   'WARNING (1), INFO (2) and DEBUG (3 or higher).'), |                   'ERROR (-1), WARNING (0), INFO (1), VERBOSE (2), DEBUG (3) ' | ||||||
|  |                   'TRACE (4 or higher).'), | ||||||
|             action='count', default=0) |             action='count', default=0) | ||||||
| 
 | 
 | ||||||
|     parser['beta'] = argparse.ArgumentParser(add_help=False) |     parser['beta'] = argparse.ArgumentParser(add_help=False) | ||||||
|  | @ -213,10 +225,13 @@ def get_parsers(): | ||||||
| def handle_loglevel(args): | def handle_loglevel(args): | ||||||
|     if args.debug: |     if args.debug: | ||||||
|         retval = "-d/--debug is deprecated, use -vvv instead" |         retval = "-d/--debug is deprecated, use -vvv instead" | ||||||
|         args.verbose = 3 |         args.verbose = _verbosity_level_debug | ||||||
|     else: |     else: | ||||||
|         retval = None |         retval = None | ||||||
| 
 | 
 | ||||||
|  |     if args.quiet: | ||||||
|  |         args.verbose = _verbosity_level_off | ||||||
|  | 
 | ||||||
|     logging.root.setLevel(_verbosity_level[args.verbose]) |     logging.root.setLevel(_verbosity_level[args.verbose]) | ||||||
| 
 | 
 | ||||||
|     return retval |     return retval | ||||||
|  |  | ||||||
							
								
								
									
										35
									
								
								cdist/log.py
									
										
									
									
									
								
							
							
						
						
									
										35
									
								
								cdist/log.py
									
										
									
									
									
								
							|  | @ -23,6 +23,31 @@ | ||||||
| import logging | import logging | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | # Define additional cdist logging levels. | ||||||
|  | logging.OFF = logging.CRITICAL + 10  # disable logging | ||||||
|  | logging.addLevelName(logging.OFF, 'OFF') | ||||||
|  | 
 | ||||||
|  | logging.VERBOSE = logging.INFO - 5 | ||||||
|  | logging.addLevelName(logging.VERBOSE, 'VERBOSE') | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def _verbose(msg, *args, **kwargs): | ||||||
|  |     logging.log(logging.VERBOSE, msg, *args, **kwargs) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | logging.verbose = _verbose | ||||||
|  | 
 | ||||||
|  | logging.TRACE = logging.DEBUG - 5 | ||||||
|  | logging.addLevelName(logging.TRACE, 'TRACE') | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def _trace(msg, *args, **kwargs): | ||||||
|  |     logging.log(logging.TRACE, msg, *args, **kwargs) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | logging.trace = _trace | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| class Log(logging.Logger): | class Log(logging.Logger): | ||||||
| 
 | 
 | ||||||
|     def __init__(self, name): |     def __init__(self, name): | ||||||
|  | @ -37,3 +62,13 @@ class Log(logging.Logger): | ||||||
|         record.msg = self.name + ": " + str(record.msg) |         record.msg = self.name + ": " + str(record.msg) | ||||||
| 
 | 
 | ||||||
|         return True |         return True | ||||||
|  | 
 | ||||||
|  |     def verbose(self, msg, *args, **kwargs): | ||||||
|  |         self.log(logging.VERBOSE, msg, *args, **kwargs) | ||||||
|  | 
 | ||||||
|  |     def trace(self, msg, *args, **kwargs): | ||||||
|  |         self.log(logging.TRACE, msg, *args, **kwargs) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | logging.setLoggerClass(Log) | ||||||
|  | logging.basicConfig(format='%(levelname)s: %(message)s') | ||||||
|  |  | ||||||
|  | @ -45,7 +45,7 @@ def resolve_target_host_name(host): | ||||||
|         log.debug("derived host_name for host \"{}\": {}".format( |         log.debug("derived host_name for host \"{}\": {}".format( | ||||||
|             host, host_name)) |             host, host_name)) | ||||||
|     except (socket.gaierror, socket.herror) as e: |     except (socket.gaierror, socket.herror) as e: | ||||||
|         log.warn("Could not derive host_name for {}" |         log.warning("Could not derive host_name for {}" | ||||||
|                  ", $host_name will be empty. Error is: {}".format(host, e)) |                  ", $host_name will be empty. Error is: {}".format(host, e)) | ||||||
|         # in case of error provide empty value |         # in case of error provide empty value | ||||||
|         host_name = '' |         host_name = '' | ||||||
|  | @ -59,7 +59,7 @@ def resolve_target_fqdn(host): | ||||||
|         log.debug("derived host_fqdn for host \"{}\": {}".format( |         log.debug("derived host_fqdn for host \"{}\": {}".format( | ||||||
|             host, host_fqdn)) |             host, host_fqdn)) | ||||||
|     except socket.herror as e: |     except socket.herror as e: | ||||||
|         log.warn("Could not derive host_fqdn for {}" |         log.warning("Could not derive host_fqdn for {}" | ||||||
|                  ", $host_fqdn will be empty. Error is: {}".format(host, e)) |                  ", $host_fqdn will be empty. Error is: {}".format(host, e)) | ||||||
|         # in case of error provide empty value |         # in case of error provide empty value | ||||||
|         host_fqdn = '' |         host_fqdn = '' | ||||||
|  |  | ||||||
|  | @ -50,12 +50,16 @@ All commands accept the following options: | ||||||
| 
 | 
 | ||||||
|     Set log level to debug (deprecated, use -vvv instead) |     Set log level to debug (deprecated, use -vvv instead) | ||||||
| 
 | 
 | ||||||
|  | .. option:: -q, --quiet | ||||||
|  | 
 | ||||||
|  |     Quiet mode: disables logging, including WARNING and ERROR | ||||||
|  | 
 | ||||||
| .. option:: -v, --verbose | .. option:: -v, --verbose | ||||||
| 
 | 
 | ||||||
|     Increase the verbosity level. Every instance of -v increments the verbosity |     Increase the verbosity level. Every instance of -v increments the verbosity | ||||||
|     level by one. Its default value is 0. There are 4 levels of verbosity. The |     level by one. Its default value is 0 which includes ERROR and WARNING levels. | ||||||
|     order of levels from the lowest to the highest are: ERROR (0), WARNING (1), |     The levels, in order from the lowest to the highest, are:  | ||||||
|     INFO (2) and DEBUG (3 or higher). |     ERROR (-1), WARNING (0), INFO (1), VERBOSE (2), DEBUG (3) TRACE (4 or higher). | ||||||
| 
 | 
 | ||||||
| .. option:: -V, --version | .. option:: -V, --version | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -80,10 +80,7 @@ if __name__ == "__main__": | ||||||
|         import os |         import os | ||||||
|         import re |         import re | ||||||
|         import cdist |         import cdist | ||||||
|         import cdist.log |  | ||||||
| 
 | 
 | ||||||
|         logging.setLoggerClass(cdist.log.Log) |  | ||||||
|         logging.basicConfig(format='%(levelname)s: %(message)s') |  | ||||||
|         log = logging.getLogger("cdist") |         log = logging.getLogger("cdist") | ||||||
| 
 | 
 | ||||||
|         if re.match("__", os.path.basename(sys.argv[0])): |         if re.match("__", os.path.basename(sys.argv[0])): | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue