diff options
Diffstat (limited to 'bitbake/lib/bb/msg.py')
-rw-r--r-- | bitbake/lib/bb/msg.py | 43 |
1 files changed, 43 insertions, 0 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 |