diff options
Diffstat (limited to 'bitbake/lib/bb/msg.py')
-rw-r--r-- | bitbake/lib/bb/msg.py | 74 |
1 files changed, 45 insertions, 29 deletions
diff --git a/bitbake/lib/bb/msg.py b/bitbake/lib/bb/msg.py index 12d19ff8e1..77a7a0fed2 100644 --- a/bitbake/lib/bb/msg.py +++ b/bitbake/lib/bb/msg.py | |||
@@ -75,6 +75,25 @@ class BBLogFormatter(logging.Formatter): | |||
75 | msg += '\n' + ''.join(formatted) | 75 | msg += '\n' + ''.join(formatted) |
76 | return msg | 76 | return msg |
77 | 77 | ||
78 | class BBLogFilter(object): | ||
79 | def __init__(self, handler, level, debug_domains): | ||
80 | self.stdlevel = level | ||
81 | self.debug_domains = debug_domains | ||
82 | loglevel = level | ||
83 | for domain in debug_domains: | ||
84 | if debug_domains[domain] < loglevel: | ||
85 | loglevel = debug_domains[domain] | ||
86 | handler.setLevel(loglevel) | ||
87 | handler.addFilter(self) | ||
88 | |||
89 | def filter(self, record): | ||
90 | if record.levelno >= self.stdlevel: | ||
91 | return True | ||
92 | if record.name in self.debug_domains and record.levelno >= self.debug_domains[record.name]: | ||
93 | return True | ||
94 | return False | ||
95 | |||
96 | |||
78 | class Loggers(dict): | 97 | class Loggers(dict): |
79 | def __getitem__(self, key): | 98 | def __getitem__(self, key): |
80 | if key in self: | 99 | if key in self: |
@@ -84,12 +103,6 @@ class Loggers(dict): | |||
84 | dict.__setitem__(self, key, log) | 103 | dict.__setitem__(self, key, log) |
85 | return log | 104 | return log |
86 | 105 | ||
87 | class DebugLevel(dict): | ||
88 | def __getitem__(self, key): | ||
89 | if key == "default": | ||
90 | key = domain.Default | ||
91 | return get_debug_level(key) | ||
92 | |||
93 | def _NamedTuple(name, fields): | 106 | def _NamedTuple(name, fields): |
94 | Tuple = collections.namedtuple(name, " ".join(fields)) | 107 | Tuple = collections.namedtuple(name, " ".join(fields)) |
95 | return Tuple(*range(len(fields))) | 108 | return Tuple(*range(len(fields))) |
@@ -110,44 +123,47 @@ domain = _NamedTuple("Domain", ( | |||
110 | "Util")) | 123 | "Util")) |
111 | logger = logging.getLogger("BitBake") | 124 | logger = logging.getLogger("BitBake") |
112 | loggers = Loggers() | 125 | loggers = Loggers() |
113 | debug_level = DebugLevel() | ||
114 | 126 | ||
115 | # Message control functions | 127 | # Message control functions |
116 | # | 128 | # |
117 | 129 | ||
118 | def set_debug_level(level): | 130 | loggerDefaultDebugLevel = 0 |
119 | for log in loggers.itervalues(): | 131 | loggerDefaultVerbose = False |
120 | log.setLevel(logging.NOTSET) | 132 | loggerDefaultDomains = [] |
121 | 133 | ||
122 | if level: | 134 | def init_msgconfig(verbose, debug, debug_domains = []): |
123 | logger.setLevel(logging.DEBUG - level + 1) | 135 | """ |
124 | else: | 136 | Set default verbosity and debug levels config the logger |
125 | logger.setLevel(logging.INFO) | 137 | """ |
138 | bb.msg.loggerDebugLevel = debug | ||
139 | bb.msg.loggerVerbose = verbose | ||
140 | bb.msg.loggerDefaultDomains = debug_domains | ||
126 | 141 | ||
127 | def get_debug_level(msgdomain = domain.Default): | 142 | def addDefaultlogFilter(handler): |
128 | if not msgdomain: | ||
129 | level = logger.getEffectiveLevel() | ||
130 | else: | ||
131 | level = loggers[msgdomain].getEffectiveLevel() | ||
132 | return max(0, logging.DEBUG - level + 1) | ||
133 | 143 | ||
134 | def set_verbose(level): | 144 | debug = loggerDefaultDebugLevel |
135 | if level: | 145 | verbose = loggerDefaultVerbose |
136 | logger.setLevel(BBLogFormatter.VERBOSE) | 146 | domains = loggerDefaultDomains |
147 | |||
148 | if debug: | ||
149 | level = BBLogFormatter.DEBUG - debug + 1 | ||
150 | elif verbose: | ||
151 | level = BBLogFormatter.VERBOSE | ||
137 | else: | 152 | else: |
138 | logger.setLevel(BBLogFormatter.INFO) | 153 | level = BBLogFormatter.NOTE |
139 | 154 | ||
140 | def set_debug_domains(domainargs): | 155 | debug_domains = {} |
141 | for (domainarg, iterator) in groupby(domainargs): | 156 | for (domainarg, iterator) in groupby(domains): |
157 | dlevel = len(tuple(iterator)) | ||
158 | debug_domains["BitBake.%s" % domainarg] = logging.DEBUG - dlevel + 1 | ||
142 | for index, msgdomain in enumerate(domain._fields): | 159 | for index, msgdomain in enumerate(domain._fields): |
143 | if msgdomain == domainarg: | 160 | if msgdomain == domainarg: |
144 | level = len(tuple(iterator)) | ||
145 | if level: | ||
146 | loggers[index].setLevel(logging.DEBUG - level + 1) | ||
147 | break | 161 | break |
148 | else: | 162 | else: |
149 | warn(None, "Logging domain %s is not valid, ignoring" % domainarg) | 163 | warn(None, "Logging domain %s is not valid, ignoring" % domainarg) |
150 | 164 | ||
165 | BBLogFilter(handler, level, debug_domains) | ||
166 | |||
151 | # | 167 | # |
152 | # Message handling functions | 168 | # Message handling functions |
153 | # | 169 | # |