diff options
Diffstat (limited to 'lib/bb/msg.py')
-rw-r--r-- | lib/bb/msg.py | 74 |
1 files changed, 45 insertions, 29 deletions
diff --git a/lib/bb/msg.py b/lib/bb/msg.py index 12d19ff8e..77a7a0fed 100644 --- a/lib/bb/msg.py +++ b/lib/bb/msg.py @@ -75,6 +75,25 @@ class BBLogFormatter(logging.Formatter): msg += '\n' + ''.join(formatted) return msg +class BBLogFilter(object): + def __init__(self, handler, level, debug_domains): + self.stdlevel = level + self.debug_domains = debug_domains + loglevel = level + for domain in debug_domains: + if debug_domains[domain] < loglevel: + loglevel = debug_domains[domain] + handler.setLevel(loglevel) + handler.addFilter(self) + + def filter(self, record): + if record.levelno >= self.stdlevel: + return True + if record.name in self.debug_domains and record.levelno >= self.debug_domains[record.name]: + return True + return False + + class Loggers(dict): def __getitem__(self, key): if key in self: @@ -84,12 +103,6 @@ class Loggers(dict): dict.__setitem__(self, key, log) return log -class DebugLevel(dict): - def __getitem__(self, key): - if key == "default": - key = domain.Default - return get_debug_level(key) - def _NamedTuple(name, fields): Tuple = collections.namedtuple(name, " ".join(fields)) return Tuple(*range(len(fields))) @@ -110,44 +123,47 @@ domain = _NamedTuple("Domain", ( "Util")) logger = logging.getLogger("BitBake") loggers = Loggers() -debug_level = DebugLevel() # Message control functions # -def set_debug_level(level): - for log in loggers.itervalues(): - log.setLevel(logging.NOTSET) +loggerDefaultDebugLevel = 0 +loggerDefaultVerbose = False +loggerDefaultDomains = [] - if level: - logger.setLevel(logging.DEBUG - level + 1) - else: - logger.setLevel(logging.INFO) +def init_msgconfig(verbose, debug, debug_domains = []): + """ + Set default verbosity and debug levels config the logger + """ + bb.msg.loggerDebugLevel = debug + bb.msg.loggerVerbose = verbose + bb.msg.loggerDefaultDomains = debug_domains -def get_debug_level(msgdomain = domain.Default): - if not msgdomain: - level = logger.getEffectiveLevel() - else: - level = loggers[msgdomain].getEffectiveLevel() - return max(0, logging.DEBUG - level + 1) +def addDefaultlogFilter(handler): -def set_verbose(level): - if level: - logger.setLevel(BBLogFormatter.VERBOSE) + debug = loggerDefaultDebugLevel + verbose = loggerDefaultVerbose + domains = loggerDefaultDomains + + if debug: + level = BBLogFormatter.DEBUG - debug + 1 + elif verbose: + level = BBLogFormatter.VERBOSE else: - logger.setLevel(BBLogFormatter.INFO) + level = BBLogFormatter.NOTE -def set_debug_domains(domainargs): - for (domainarg, iterator) in groupby(domainargs): + debug_domains = {} + for (domainarg, iterator) in groupby(domains): + dlevel = len(tuple(iterator)) + debug_domains["BitBake.%s" % domainarg] = logging.DEBUG - dlevel + 1 for index, msgdomain in enumerate(domain._fields): if msgdomain == domainarg: - level = len(tuple(iterator)) - if level: - loggers[index].setLevel(logging.DEBUG - level + 1) break else: warn(None, "Logging domain %s is not valid, ignoring" % domainarg) + BBLogFilter(handler, level, debug_domains) + # # Message handling functions # |