Define better warning facility.

This commit is contained in:
Darko Poljak 2017-06-28 10:18:53 +02:00 committed by Steven Armstrong
parent 01ca5910ec
commit c63ab44c9c
6 changed files with 68 additions and 17 deletions

View file

@ -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

View file

@ -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

View file

@ -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')

View file

@ -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 = ''

View file

@ -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

View file

@ -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])):