Skip to content

Commit 088cb82

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Allow custom log levels for other loggers"
2 parents 9117782 + b95ce71 commit 088cb82

1 file changed

Lines changed: 37 additions & 9 deletions

File tree

openstackclient/common/logs.py

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,13 @@
1818
import warnings
1919

2020

21+
def get_loggers():
22+
loggers = {}
23+
for logkey in logging.Logger.manager.loggerDict.keys():
24+
loggers[logkey] = logging.getLevelName(logging.getLogger(logkey).level)
25+
return loggers
26+
27+
2128
def log_level_from_options(options):
2229
# if --debug, --quiet or --verbose is not specified,
2330
# the default logging level is warning
@@ -34,6 +41,17 @@ def log_level_from_options(options):
3441
return log_level
3542

3643

44+
def log_level_from_string(level_string):
45+
log_level = {
46+
'critical': logging.CRITICAL,
47+
'error': logging.ERROR,
48+
'warning': logging.WARNING,
49+
'info': logging.INFO,
50+
'debug': logging.DEBUG,
51+
}.get(level_string, logging.WARNING)
52+
return log_level
53+
54+
3755
def log_level_from_config(config):
3856
# Check the command line option
3957
verbose_level = config.get('verbose_level')
@@ -49,15 +67,7 @@ def log_level_from_config(config):
4967
verbose_level = 'info'
5068
else:
5169
verbose_level = 'debug'
52-
53-
log_level = {
54-
'critical': logging.CRITICAL,
55-
'error': logging.ERROR,
56-
'warning': logging.WARNING,
57-
'info': logging.INFO,
58-
'debug': logging.DEBUG,
59-
}.get(verbose_level, logging.WARNING)
60-
return log_level
70+
return log_level_from_string(verbose_level)
6171

6272

6373
def set_warning_filter(log_level):
@@ -168,3 +178,21 @@ def configure(self, cloud_config):
168178
self.file_logger.setFormatter(_FileFormatter(config=cloud_config))
169179
self.file_logger.setLevel(log_level)
170180
self.root_logger.addHandler(self.file_logger)
181+
182+
logconfig = cloud_config.config.get('logging', None)
183+
if logconfig:
184+
highest_level = logging.NOTSET
185+
for k in logconfig.keys():
186+
level = log_level_from_string(logconfig[k])
187+
logging.getLogger(k).setLevel(level)
188+
if (highest_level < level):
189+
highest_level = level
190+
self.console_logger.setLevel(highest_level)
191+
if self.file_logger:
192+
self.file_logger.setLevel(highest_level)
193+
# loggers that are not set will use the handler level, so we
194+
# need to set the global level for all the loggers
195+
for logkey in logging.Logger.manager.loggerDict.keys():
196+
logger = logging.getLogger(logkey)
197+
if logger.level == logging.NOTSET:
198+
logger.setLevel(log_level)

0 commit comments

Comments
 (0)