summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSeth Bollinger <seth.boll@gmail.com>2012-11-15 19:29:40 -0600
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-11-19 15:49:03 +0000
commit2734240da2cc150f811129a6adf6eb4b2161b204 (patch)
treea516a37eb4440f96fc3fd9ac50230e559e860d50
parent64c662ab7f09c2e867445e8ba21ea63ae014d45b (diff)
downloadbitbake-2734240da2cc150f811129a6adf6eb4b2161b204.tar.gz
knotty: Colorize knotty interactive console output
Add bold color output to log level name and standard color output to log msg when bitbake is run from an iteractive console. Color output is only enabled if the terminal supports color. Used Jason Wessel's recommendation for transparency on verbose, note and plain. Signed-off-by: Seth Bollinger <seth.boll@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--lib/bb/msg.py43
-rw-r--r--lib/bb/ui/knotty.py6
2 files changed, 48 insertions, 1 deletions
diff --git a/lib/bb/msg.py b/lib/bb/msg.py
index 9b393252f..007c95a4e 100644
--- a/lib/bb/msg.py
+++ b/lib/bb/msg.py
@@ -23,6 +23,7 @@ Message handling infrastructure for bitbake
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
import sys
+import copy
import logging
import collections
from itertools import groupby
@@ -55,6 +56,25 @@ class BBLogFormatter(logging.Formatter):
CRITICAL: 'ERROR',
}
+ color_enabled = False
+ BASECOLOR, BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(29,38)
+
+ COLORS = {
+ DEBUG3 : CYAN,
+ DEBUG2 : CYAN,
+ DEBUG : CYAN,
+ VERBOSE : BASECOLOR,
+ NOTE : BASECOLOR,
+ PLAIN : BASECOLOR,
+ WARNING : YELLOW,
+ ERROR : RED,
+ CRITICAL: RED,
+ }
+
+ BLD = '\033[1;%dm'
+ STD = '\033[%dm'
+ RST = '\033[0m'
+
def getLevelName(self, levelno):
try:
return self.levelnames[levelno]
@@ -67,6 +87,8 @@ class BBLogFormatter(logging.Formatter):
if record.levelno == self.PLAIN:
msg = record.getMessage()
else:
+ if self.color_enabled:
+ record = self.colorize(record)
msg = logging.Formatter.format(self, record)
if hasattr(record, 'bb_exc_info'):
@@ -75,6 +97,27 @@ class BBLogFormatter(logging.Formatter):
msg += '\n' + ''.join(formatted)
return msg
+ def colorize(self, record):
+ color = self.COLORS[record.levelno]
+ if self.color_enabled and color is not None:
+ record = copy.copy(record)
+ record.levelname = "".join([self.BLD % color, record.levelname, self.RST])
+ record.msg = "".join([self.STD % color, record.msg, self.RST])
+ return record
+
+ def enable_color(self):
+ import curses
+ try:
+ win = None
+ win = curses.initscr()
+ if curses.has_colors():
+ self.color_enabled = True
+ except:
+ pass
+ finally:
+ if win is not None:
+ curses.endwin()
+
class BBLogFilter(object):
def __init__(self, handler, level, debug_domains):
self.stdlevel = level
diff --git a/lib/bb/ui/knotty.py b/lib/bb/ui/knotty.py
index 77ec7302a..a63d8b120 100644
--- a/lib/bb/ui/knotty.py
+++ b/lib/bb/ui/knotty.py
@@ -238,12 +238,16 @@ def main(server, eventHandler, tf = TerminalFilter):
helper = uihelper.BBUIHelper()
console = logging.StreamHandler(sys.stdout)
- format = bb.msg.BBLogFormatter("%(levelname)s: %(message)s")
+ format_str = "%(levelname)s: %(message)s"
+ format = bb.msg.BBLogFormatter(format_str)
+ if interactive:
+ format.enable_color()
bb.msg.addDefaultlogFilter(console)
console.setFormatter(format)
logger.addHandler(console)
if consolelogfile:
bb.utils.mkdirhier(os.path.dirname(consolelogfile))
+ format = bb.msg.BBLogFormatter(format_str)
consolelog = logging.FileHandler(consolelogfile)
bb.msg.addDefaultlogFilter(consolelog)
consolelog.setFormatter(format)