diff options
-rwxr-xr-x | bitbake/bin/bitbake | 3 | ||||
-rwxr-xr-x | bitbake/bin/bitdoc | 5 | ||||
-rw-r--r-- | bitbake/lib/bb/__init__.py | 2 | ||||
-rw-r--r-- | bitbake/lib/bb/build.py | 6 | ||||
-rw-r--r-- | bitbake/lib/bb/msg.py | 74 | ||||
-rw-r--r-- | bitbake/lib/bb/ui/knotty.py | 5 | ||||
-rw-r--r-- | bitbake/lib/bb/utils.py | 15 |
7 files changed, 57 insertions, 53 deletions
diff --git a/bitbake/bin/bitbake b/bitbake/bin/bitbake index fdeeb36a40..56f39f8efe 100755 --- a/bitbake/bin/bitbake +++ b/bitbake/bin/bitbake | |||
@@ -190,7 +190,7 @@ Default BBFILES are the .bb files in the current directory.""") | |||
190 | # server is daemonized this logfile will be truncated. | 190 | # server is daemonized this logfile will be truncated. |
191 | cooker_logfile = os.path.join(os.getcwd(), "cooker.log") | 191 | cooker_logfile = os.path.join(os.getcwd(), "cooker.log") |
192 | 192 | ||
193 | bb.utils.init_logger(bb.msg, configuration.verbose, configuration.debug, | 193 | bb.msg.init_msgconfig(configuration.verbose, configuration.debug, |
194 | configuration.debug_domains) | 194 | configuration.debug_domains) |
195 | 195 | ||
196 | # Ensure logging messages get sent to the UI as events | 196 | # Ensure logging messages get sent to the UI as events |
@@ -228,6 +228,7 @@ Default BBFILES are the .bb files in the current directory.""") | |||
228 | try: | 228 | try: |
229 | return server.launchUI(ui_main, server_connection.connection, server_connection.events) | 229 | return server.launchUI(ui_main, server_connection.connection, server_connection.events) |
230 | finally: | 230 | finally: |
231 | bb.event.ui_queue = [] | ||
231 | server_connection.terminate() | 232 | server_connection.terminate() |
232 | 233 | ||
233 | return 1 | 234 | return 1 |
diff --git a/bitbake/bin/bitdoc b/bitbake/bin/bitdoc index 98fb025a50..08a0173d72 100755 --- a/bitbake/bin/bitdoc +++ b/bitbake/bin/bitdoc | |||
@@ -430,9 +430,8 @@ Create a set of html pages (documentation) for a bitbake.conf.... | |||
430 | action = "store_true", dest = "verbose", default = False ) | 430 | action = "store_true", dest = "verbose", default = False ) |
431 | 431 | ||
432 | options, args = parser.parse_args( sys.argv ) | 432 | options, args = parser.parse_args( sys.argv ) |
433 | 433 | ||
434 | if options.debug: | 434 | bb.msg.init_msgconfig(options.verbose, options.debug) |
435 | bb.msg.set_debug_level(options.debug) | ||
436 | 435 | ||
437 | return options.config, options.output | 436 | return options.config, options.output |
438 | 437 | ||
diff --git a/bitbake/lib/bb/__init__.py b/bitbake/lib/bb/__init__.py index 06d865994c..3c8572476c 100644 --- a/bitbake/lib/bb/__init__.py +++ b/bitbake/lib/bb/__init__.py | |||
@@ -56,7 +56,7 @@ logging.setLoggerClass(BBLogger) | |||
56 | 56 | ||
57 | logger = logging.getLogger("BitBake") | 57 | logger = logging.getLogger("BitBake") |
58 | logger.addHandler(NullHandler()) | 58 | logger.addHandler(NullHandler()) |
59 | logger.setLevel(logging.INFO) | 59 | logger.setLevel(logging.DEBUG - 2) |
60 | 60 | ||
61 | # This has to be imported after the setLoggerClass, as the import of bb.msg | 61 | # This has to be imported after the setLoggerClass, as the import of bb.msg |
62 | # can result in construction of the various loggers. | 62 | # can result in construction of the various loggers. |
diff --git a/bitbake/lib/bb/build.py b/bitbake/lib/bb/build.py index 5c703095b7..31fde06e6a 100644 --- a/bitbake/lib/bb/build.py +++ b/bitbake/lib/bb/build.py | |||
@@ -223,7 +223,7 @@ def exec_func_shell(function, d, runfile, cwd=None): | |||
223 | 223 | ||
224 | with open(runfile, 'w') as script: | 224 | with open(runfile, 'w') as script: |
225 | script.write('#!/bin/sh -e\n') | 225 | script.write('#!/bin/sh -e\n') |
226 | if logger.isEnabledFor(logging.DEBUG): | 226 | if bb.msg.loggerVerbose[1]: |
227 | script.write("set -x\n") | 227 | script.write("set -x\n") |
228 | data.emit_func(function, script, d) | 228 | data.emit_func(function, script, d) |
229 | if cwd: | 229 | if cwd: |
@@ -234,7 +234,7 @@ def exec_func_shell(function, d, runfile, cwd=None): | |||
234 | 234 | ||
235 | cmd = runfile | 235 | cmd = runfile |
236 | 236 | ||
237 | if logger.isEnabledFor(logging.DEBUG): | 237 | if bb.msg.loggerVerbose[1]: |
238 | logfile = LogTee(logger, sys.stdout) | 238 | logfile = LogTee(logger, sys.stdout) |
239 | else: | 239 | else: |
240 | logfile = sys.stdout | 240 | logfile = sys.stdout |
@@ -308,6 +308,8 @@ def _exec_task(fn, task, d, quieterr): | |||
308 | # Ensure python logging goes to the logfile | 308 | # Ensure python logging goes to the logfile |
309 | handler = logging.StreamHandler(logfile) | 309 | handler = logging.StreamHandler(logfile) |
310 | handler.setFormatter(logformatter) | 310 | handler.setFormatter(logformatter) |
311 | # Always enable full debug output into task logfiles | ||
312 | handler.setLevel(logging.DEBUG - 2) | ||
311 | bblogger.addHandler(handler) | 313 | bblogger.addHandler(handler) |
312 | 314 | ||
313 | localdata.setVar('BB_LOGFILE', logfn) | 315 | localdata.setVar('BB_LOGFILE', logfn) |
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 | # |
diff --git a/bitbake/lib/bb/ui/knotty.py b/bitbake/lib/bb/ui/knotty.py index 7a2681d2bf..7c645adcc4 100644 --- a/bitbake/lib/bb/ui/knotty.py +++ b/bitbake/lib/bb/ui/knotty.py | |||
@@ -74,6 +74,7 @@ def main(server, eventHandler): | |||
74 | 74 | ||
75 | console = logging.StreamHandler(sys.stdout) | 75 | console = logging.StreamHandler(sys.stdout) |
76 | format = bb.msg.BBLogFormatter("%(levelname)s: %(message)s") | 76 | format = bb.msg.BBLogFormatter("%(levelname)s: %(message)s") |
77 | bb.msg.addDefaultlogFilter(console) | ||
77 | console.setFormatter(format) | 78 | console.setFormatter(format) |
78 | logger.addHandler(console) | 79 | logger.addHandler(console) |
79 | 80 | ||
@@ -120,8 +121,8 @@ def main(server, eventHandler): | |||
120 | # For "normal" logging conditions, don't show note logs from tasks | 121 | # For "normal" logging conditions, don't show note logs from tasks |
121 | # but do show them if the user has changed the default log level to | 122 | # but do show them if the user has changed the default log level to |
122 | # include verbose/debug messages | 123 | # include verbose/debug messages |
123 | if logger.getEffectiveLevel() > format.VERBOSE: | 124 | #if logger.getEffectiveLevel() > format.VERBOSE: |
124 | if event.taskpid != 0 and event.levelno <= format.NOTE: | 125 | if event.taskpid != 0 and event.levelno <= format.NOTE: |
125 | continue | 126 | continue |
126 | logger.handle(event) | 127 | logger.handle(event) |
127 | continue | 128 | continue |
diff --git a/bitbake/lib/bb/utils.py b/bitbake/lib/bb/utils.py index 4eac2852ed..1cf1a8da44 100644 --- a/bitbake/lib/bb/utils.py +++ b/bitbake/lib/bb/utils.py | |||
@@ -830,21 +830,6 @@ def which(path, item, direction = 0): | |||
830 | 830 | ||
831 | return "" | 831 | return "" |
832 | 832 | ||
833 | def init_logger(logger, verbose, debug, debug_domains): | ||
834 | """ | ||
835 | Set verbosity and debug levels in the logger | ||
836 | """ | ||
837 | |||
838 | if debug: | ||
839 | bb.msg.set_debug_level(debug) | ||
840 | elif verbose: | ||
841 | bb.msg.set_verbose(True) | ||
842 | else: | ||
843 | bb.msg.set_debug_level(0) | ||
844 | |||
845 | if debug_domains: | ||
846 | bb.msg.set_debug_domains(debug_domains) | ||
847 | |||
848 | def to_boolean(string, default=None): | 833 | def to_boolean(string, default=None): |
849 | if not string: | 834 | if not string: |
850 | return default | 835 | return default |