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)