diff --git a/openstackclient/common/context.py b/openstackclient/common/context.py index 70c8594398..4c04e661ff 100644 --- a/openstackclient/common/context.py +++ b/openstackclient/common/context.py @@ -38,6 +38,32 @@ def log_level_from_options(options): return log_level +def log_level_from_config(config): + # Check the command line option + verbose_level = config.get('verbose_level') + if config.get('debug', False): + verbose_level = 3 + if verbose_level == 0: + verbose_level = 'error' + elif verbose_level == 1: + # If a command line option has not been specified, check the + # configuration file + verbose_level = config.get('log_level', 'warning') + elif verbose_level == 2: + verbose_level = 'info' + else: + verbose_level = 'debug' + + log_level = { + 'critical': logging.CRITICAL, + 'error': logging.ERROR, + 'warning': logging.WARNING, + 'info': logging.INFO, + 'debug': logging.DEBUG, + }.get(verbose_level, logging.WARNING) + return log_level + + def set_warning_filter(log_level): if log_level == logging.ERROR: warnings.simplefilter("ignore") @@ -71,18 +97,11 @@ def setup_logging(shell, cloud_config): :return: None """ - log_level = logging.WARNING + log_level = log_level_from_config(cloud_config.config) + set_warning_filter(log_level) + log_file = cloud_config.config.get('log_file', None) if log_file: - # setup the logging level - get_log_level = cloud_config.config.get('log_level') - if get_log_level: - log_level = { - 'error': logging.ERROR, - 'info': logging.INFO, - 'debug': logging.DEBUG, - }.get(get_log_level, logging.WARNING) - # setup the logging context log_cont = _LogContext( clouds_name=cloud_config.config.get('cloud'), diff --git a/openstackclient/tests/common/test_context.py b/openstackclient/tests/common/test_context.py index 63c2420516..38a4d833bc 100644 --- a/openstackclient/tests/common/test_context.py +++ b/openstackclient/tests/common/test_context.py @@ -73,6 +73,30 @@ class TestContext(utils.TestCase): opts.verbose_level = 3 self.assertEqual(logging.DEBUG, context.log_level_from_options(opts)) + def test_log_level_from_config(self): + cfg = {'verbose_level': 0} + self.assertEqual(logging.ERROR, context.log_level_from_config(cfg)) + cfg = {'verbose_level': 1} + self.assertEqual(logging.WARNING, context.log_level_from_config(cfg)) + cfg = {'verbose_level': 2} + self.assertEqual(logging.INFO, context.log_level_from_config(cfg)) + cfg = {'verbose_level': 3} + self.assertEqual(logging.DEBUG, context.log_level_from_config(cfg)) + cfg = {'verbose_level': 1, 'log_level': 'critical'} + self.assertEqual(logging.CRITICAL, context.log_level_from_config(cfg)) + cfg = {'verbose_level': 1, 'log_level': 'error'} + self.assertEqual(logging.ERROR, context.log_level_from_config(cfg)) + cfg = {'verbose_level': 1, 'log_level': 'warning'} + self.assertEqual(logging.WARNING, context.log_level_from_config(cfg)) + cfg = {'verbose_level': 1, 'log_level': 'info'} + self.assertEqual(logging.INFO, context.log_level_from_config(cfg)) + cfg = {'verbose_level': 1, 'log_level': 'debug'} + self.assertEqual(logging.DEBUG, context.log_level_from_config(cfg)) + cfg = {'verbose_level': 1, 'log_level': 'bogus'} + self.assertEqual(logging.WARNING, context.log_level_from_config(cfg)) + cfg = {'verbose_level': 1, 'log_level': 'info', 'debug': True} + self.assertEqual(logging.DEBUG, context.log_level_from_config(cfg)) + @mock.patch('warnings.simplefilter') def test_set_warning_filter(self, simplefilter): context.set_warning_filter(logging.ERROR)