summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/msg.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/bb/msg.py')
-rw-r--r--bitbake/lib/bb/msg.py43
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
25import sys 25import sys
26import copy
26import logging 27import logging
27import collections 28import collections
28from itertools import groupby 29from 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
78class BBLogFilter(object): 121class 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