1818import 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+
2128def 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+
3755def 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
6373def 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