summaryrefslogtreecommitdiff
path: root/gbp/log.py
diff options
context:
space:
mode:
authorMarkus Lehtonen <markus.lehtonen@linux.intel.com>2012-11-13 11:39:25 +0200
committerGuido Günther <agx@sigxcpu.org>2012-11-25 17:51:13 +0100
commit48c48c9e4d4200a4e50b25bcab95ce947c1dd932 (patch)
tree4da07da0c8e1bb2d27b7720810acd6fbe2cec722 /gbp/log.py
parent2fa7cac51afb2d861626afa8967b32aa78c2e734 (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.py31
1 files changed, 29 insertions, 2 deletions
diff --git a/gbp/log.py b/gbp/log.py
index 70f0f10..b995056 100644
--- a/gbp/log.py
+++ b/gbp/log.py
@@ -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: