diff options
| -rw-r--r-- | bitbake/lib/bb/msg.py | 43 | ||||
| -rw-r--r-- | bitbake/lib/bb/ui/knotty.py | 6 |
2 files changed, 48 insertions, 1 deletions
diff --git a/bitbake/lib/bb/msg.py b/bitbake/lib/bb/msg.py index 9b393252f3..007c95a4ea 100644 --- a/bitbake/lib/bb/msg.py +++ b/bitbake/lib/bb/msg.py | |||
| @@ -23,6 +23,7 @@ Message handling infrastructure for bitbake | |||
| 23 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | 23 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
| 24 | 24 | ||
| 25 | import sys | 25 | import sys |
| 26 | import copy | ||
| 26 | import logging | 27 | import logging |
| 27 | import collections | 28 | import collections |
| 28 | from itertools import groupby | 29 | from itertools import groupby |
| @@ -55,6 +56,25 @@ class BBLogFormatter(logging.Formatter): | |||
| 55 | CRITICAL: 'ERROR', | 56 | CRITICAL: 'ERROR', |
| 56 | } | 57 | } |
| 57 | 58 | ||
| 59 | color_enabled = False | ||
| 60 | BASECOLOR, BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(29,38) | ||
| 61 | |||
| 62 | COLORS = { | ||
| 63 | DEBUG3 : CYAN, | ||
| 64 | DEBUG2 : CYAN, | ||
| 65 | DEBUG : CYAN, | ||
| 66 | VERBOSE : BASECOLOR, | ||
| 67 | NOTE : BASECOLOR, | ||
| 68 | PLAIN : BASECOLOR, | ||
| 69 | WARNING : YELLOW, | ||
| 70 | ERROR : RED, | ||
| 71 | CRITICAL: RED, | ||
| 72 | } | ||
| 73 | |||
| 74 | BLD = '\033[1;%dm' | ||
| 75 | STD = '\033[%dm' | ||
| 76 | RST = '\033[0m' | ||
| 77 | |||
| 58 | def getLevelName(self, levelno): | 78 | def getLevelName(self, levelno): |
| 59 | try: | 79 | try: |
| 60 | return self.levelnames[levelno] | 80 | return self.levelnames[levelno] |
| @@ -67,6 +87,8 @@ class BBLogFormatter(logging.Formatter): | |||
| 67 | if record.levelno == self.PLAIN: | 87 | if record.levelno == self.PLAIN: |
| 68 | msg = record.getMessage() | 88 | msg = record.getMessage() |
| 69 | else: | 89 | else: |
| 90 | if self.color_enabled: | ||
| 91 | record = self.colorize(record) | ||
| 70 | msg = logging.Formatter.format(self, record) | 92 | msg = logging.Formatter.format(self, record) |
| 71 | 93 | ||
| 72 | if hasattr(record, 'bb_exc_info'): | 94 | if hasattr(record, 'bb_exc_info'): |
| @@ -75,6 +97,27 @@ class BBLogFormatter(logging.Formatter): | |||
| 75 | msg += '\n' + ''.join(formatted) | 97 | msg += '\n' + ''.join(formatted) |
| 76 | return msg | 98 | return msg |
| 77 | 99 | ||
| 100 | def colorize(self, record): | ||
| 101 | color = self.COLORS[record.levelno] | ||
| 102 | if self.color_enabled and color is not None: | ||
| 103 | record = copy.copy(record) | ||
| 104 | record.levelname = "".join([self.BLD % color, record.levelname, self.RST]) | ||
| 105 | record.msg = "".join([self.STD % color, record.msg, self.RST]) | ||
| 106 | return record | ||
| 107 | |||
| 108 | def enable_color(self): | ||
| 109 | import curses | ||
| 110 | try: | ||
| 111 | win = None | ||
| 112 | win = curses.initscr() | ||
| 113 | if curses.has_colors(): | ||
| 114 | self.color_enabled = True | ||
| 115 | except: | ||
| 116 | pass | ||
| 117 | finally: | ||
| 118 | if win is not None: | ||
| 119 | curses.endwin() | ||
| 120 | |||
| 78 | class BBLogFilter(object): | 121 | class BBLogFilter(object): |
| 79 | def __init__(self, handler, level, debug_domains): | 122 | def __init__(self, handler, level, debug_domains): |
| 80 | self.stdlevel = level | 123 | self.stdlevel = level |
diff --git a/bitbake/lib/bb/ui/knotty.py b/bitbake/lib/bb/ui/knotty.py index 77ec7302a7..a63d8b120e 100644 --- a/bitbake/lib/bb/ui/knotty.py +++ b/bitbake/lib/bb/ui/knotty.py | |||
| @@ -238,12 +238,16 @@ def main(server, eventHandler, tf = TerminalFilter): | |||
| 238 | helper = uihelper.BBUIHelper() | 238 | helper = uihelper.BBUIHelper() |
| 239 | 239 | ||
| 240 | console = logging.StreamHandler(sys.stdout) | 240 | console = logging.StreamHandler(sys.stdout) |
| 241 | format = bb.msg.BBLogFormatter("%(levelname)s: %(message)s") | 241 | format_str = "%(levelname)s: %(message)s" |
| 242 | format = bb.msg.BBLogFormatter(format_str) | ||
| 243 | if interactive: | ||
| 244 | format.enable_color() | ||
| 242 | bb.msg.addDefaultlogFilter(console) | 245 | bb.msg.addDefaultlogFilter(console) |
| 243 | console.setFormatter(format) | 246 | console.setFormatter(format) |
| 244 | logger.addHandler(console) | 247 | logger.addHandler(console) |
| 245 | if consolelogfile: | 248 | if consolelogfile: |
| 246 | bb.utils.mkdirhier(os.path.dirname(consolelogfile)) | 249 | bb.utils.mkdirhier(os.path.dirname(consolelogfile)) |
| 250 | format = bb.msg.BBLogFormatter(format_str) | ||
| 247 | consolelog = logging.FileHandler(consolelogfile) | 251 | consolelog = logging.FileHandler(consolelogfile) |
| 248 | bb.msg.addDefaultlogFilter(consolelog) | 252 | bb.msg.addDefaultlogFilter(consolelog) |
| 249 | consolelog.setFormatter(format) | 253 | consolelog.setFormatter(format) |
