diff options
Diffstat (limited to 'lib/bb/msg.py')
-rw-r--r-- | lib/bb/msg.py | 130 |
1 files changed, 66 insertions, 64 deletions
diff --git a/lib/bb/msg.py b/lib/bb/msg.py index 8d2bcce45..098b0dc80 100644 --- a/lib/bb/msg.py +++ b/lib/bb/msg.py @@ -23,12 +23,26 @@ Message handling infrastructure for bitbake # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import sys +import logging import collections +from itertools import groupby import bb import bb.event -debug_level = collections.defaultdict(lambda: 0) -verbose = False +class Loggers(dict): + def __getitem__(self, key): + if key in self: + return dict.__getitem__(self, key) + else: + log = logging.getLogger("BitBake.%s" % domain._fields[key]) + 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)) @@ -48,94 +62,82 @@ domain = _NamedTuple("Domain", ( "RunQueue", "TaskData", "Util")) +logger = logging.getLogger("BitBake") +loggers = Loggers() +debug_level = DebugLevel() - -class MsgBase(bb.event.Event): - """Base class for messages""" - - def __init__(self, msg): - self._message = msg - bb.event.Event.__init__(self) - -class MsgDebug(MsgBase): - """Debug Message""" - -class MsgNote(MsgBase): - """Note Message""" - -class MsgWarn(MsgBase): - """Warning Message""" - -class MsgError(MsgBase): - """Error Message""" - -class MsgFatal(MsgBase): - """Fatal Message""" - -class MsgPlain(MsgBase): - """General output""" - -# # Message control functions # def set_debug_level(level): - for d in domain: - debug_level[d] = level - debug_level[domain.Default] = level + for log in loggers.itervalues(): + log.setLevel(logging.NOTSET) + + if level: + logger.setLevel(logging.DEBUG - level + 1) + else: + logger.setLevel(logging.INFO) def get_debug_level(msgdomain = domain.Default): - return debug_level[msgdomain] + if not msgdomain: + level = logger.getEffectiveLevel() + else: + level = loggers[msgdomain].getEffectiveLevel() + return max(0, logging.DEBUG - level + 1) def set_verbose(level): - verbose = level - -def set_debug_domains(strdomains): - for domainstr in strdomains: - for d in domain: - if domain._fields[d] == domainstr: - debug_level[d] += 1 + if level: + logger.setLevel(logging.INFO - 1) + else: + logger.setLevel(logging.INFO) + +def set_debug_domains(domainargs): + for (domainarg, iterator) in groupby(domainargs): + 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" % domainstr) + warn(None, "Logging domain %s is not valid, ignoring" % domainarg) # # Message handling functions # def debug(level, msgdomain, msg, fn = None): + level = logging.DEBUG - (level - 1) if not msgdomain: - msgdomain = domain.Default + logger.log(level, msg) + else: + loggers[msgdomain].log(level, msg) - if debug_level[msgdomain] >= level: - bb.event.fire(MsgDebug(msg), None) - if not bb.event._ui_handlers: - print('DEBUG: %s' % (msg)) +def plain(msg, fn = None): + logger.log(logging.INFO + 1, msg) def note(level, msgdomain, msg, fn = None): + level = logging.INFO - (level - 1) if not msgdomain: - msgdomain = domain.Default - - if level == 1 or verbose or debug_level[msgdomain] >= 1: - bb.event.fire(MsgNote(msg), None) - if not bb.event._ui_handlers: - print('NOTE: %s' % (msg)) + logger.log(level, msg) + else: + loggers[msgdomain].log(level, msg) def warn(msgdomain, msg, fn = None): - bb.event.fire(MsgWarn(msg), None) - if not bb.event._ui_handlers: - print('WARNING: %s' % (msg)) + if not msgdomain: + logger.warn(msg) + else: + loggers[msgdomain].warn(msg) def error(msgdomain, msg, fn = None): - bb.event.fire(MsgError(msg), None) - print('ERROR: %s' % (msg)) + if not msgdomain: + logger.error(msg) + else: + loggers[msgdomain].error(msg) def fatal(msgdomain, msg, fn = None): - bb.event.fire(MsgFatal(msg), None) - print('FATAL: %s' % (msg)) + if not msgdomain: + logger.critical(msg) + else: + loggers[msgdomain].critical(msg) sys.exit(1) - -def plain(msg, fn = None): - bb.event.fire(MsgPlain(msg), None) - if not bb.event._ui_handlers: - print(msg) |