diff options
author | Markus Lehtonen <markus.lehtonen@linux.intel.com> | 2012-11-13 11:39:25 +0200 |
---|---|---|
committer | Guido Günther <agx@sigxcpu.org> | 2012-11-25 17:51:13 +0100 |
commit | 48c48c9e4d4200a4e50b25bcab95ce947c1dd932 (patch) | |
tree | 4da07da0c8e1bb2d27b7720810acd6fbe2cec722 /gbp/log.py | |
parent | 2fa7cac51afb2d861626afa8967b32aa78c2e734 (diff) |
log: add support for setting the color scheme
Implements changeable color schemes in the gbp.log module. Color scheme
is given as a colon-separated list, with one color for each log level:
'<debug_color>:<info_color>:<warning_colro>:<error_color>'. Colors can
be given as an integer number (ANSI terminal color code) or color name
(.e.g 'red'). Missing or empty fields are interpreted as using the
default color for that log level.
Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
Diffstat (limited to 'gbp/log.py')
-rw-r--r-- | gbp/log.py | 31 |
1 files changed, 29 insertions, 2 deletions
@@ -53,6 +53,7 @@ class GbpStreamHandler(logging.StreamHandler): def __init__(self, stream=None, color=True): super(GbpStreamHandler, self).__init__(stream) self._color = color + self._color_scheme = DEFAULT_COLOR_SCHEME.copy() msg_fmt = "%(color)s%(name)s:%(levelname)s: %(message)s%(coloroff)s" self.setFormatter(logging.Formatter(fmt=msg_fmt)) @@ -60,6 +61,11 @@ class GbpStreamHandler(logging.StreamHandler): """Set/unset colorized output""" self._color = color + def set_color_scheme(self, color_scheme={}): + """Set logging colors""" + self._color_scheme = DEFAULT_COLOR_SCHEME.copy() + self._color_scheme.update(color_scheme) + def set_format(self, fmt): """Set logging format""" self.setFormatter(logging.Formatter(fmt=fmt)) @@ -69,7 +75,7 @@ class GbpStreamHandler(logging.StreamHandler): # Never write color-escaped output to non-tty streams record.color = record.coloroff = "" if self._color and self.stream.isatty(): - record.color = self.COLOR_SEQ % DEFAULT_COLOR_SCHEME[record.levelno] + record.color = self.COLOR_SEQ % self._color_scheme[record.levelno] record.coloroff = self.OFF_SEQ record.levelname = record.levelname.lower() return super(GbpStreamHandler, self).format(record) @@ -93,6 +99,11 @@ class GbpLogger(logging.Logger): for hdlr in self._default_handlers: hdlr.set_color(color) + def set_color_scheme(self, color_scheme={}): + """Set the color scheme of the default handlers""" + for hdlr in self._default_handlers: + hdlr.set_color_scheme(color_scheme) + def set_format(self, fmt): """Set the format of the default handlers""" for hdlr in self._default_handlers: @@ -128,9 +139,25 @@ def _use_color(color): return not in_emacs return False -def setup(color, verbose): +def _parse_color_scheme(color_scheme=""): + """Set logging colors""" + scheme = {} + colors = color_scheme.split(':') + levels = (DEBUG, INFO, WARNING, ERROR) + for field, color in enumerate(colors): + level = levels[field] + try: + scheme[level] = int(color) + except ValueError: + try: + scheme[level] = COLORS[color.lower()] + except KeyError: pass + return scheme + +def setup(color, verbose, color_scheme=""): """Basic logger setup""" LOGGER.set_color(_use_color(color)) + LOGGER.set_color_scheme(_parse_color_scheme(color_scheme)) if verbose: LOGGER.setLevel(DEBUG) else: |