summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Eggleton <paul.eggleton@linux.intel.com>2016-12-13 10:53:51 +1300
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-12-14 12:20:35 +0000
commitf1cd6fab604f14d8686b1d783cbfe012d923ee42 (patch)
tree8ce6a783f0c5f9ff4bd333f6d9e7dbc6a18e61b6
parent58c60a951229dcbd8253863fb24228d046c23f6e (diff)
downloadopenembedded-core-contrib-f1cd6fab604f14d8686b1d783cbfe012d923ee42.tar.gz
lib/bb/build: enable access to logger within tasks
In certain circumstances it can be useful to get access to BitBake's logger within a task; the main example is in OpenEmbedded's image construction code where we want to be able to check the log file for errors and warnings, but we don't want to see any errors or warnings that were emitted through the logger; so we need a way to exclude those. In order to do this, pass the logger object into the task via a BB_TASK_LOGGER variable, and add a logging handler class to bb.utils that can be added to it in order to keep a list of warnings/errors that have been emitted. Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--lib/bb/build.py1
-rw-r--r--lib/bb/utils.py11
2 files changed, 12 insertions, 0 deletions
diff --git a/lib/bb/build.py b/lib/bb/build.py
index 7a7aabb853..0c2c1ba126 100644
--- a/lib/bb/build.py
+++ b/lib/bb/build.py
@@ -562,6 +562,7 @@ def _exec_task(fn, task, d, quieterr):
localdata.setVar('BB_LOGFILE', logfn)
localdata.setVar('BB_RUNTASK', task)
+ localdata.setVar('BB_TASK_LOGGER', bblogger)
flags = localdata.getVarFlags(task)
diff --git a/lib/bb/utils.py b/lib/bb/utils.py
index 9073f15ea2..a22a05e241 100644
--- a/lib/bb/utils.py
+++ b/lib/bb/utils.py
@@ -1503,3 +1503,14 @@ def load_plugins(logger, plugins, pluginpath):
plugins.append(obj or plugin)
else:
plugins.append(plugin)
+
+
+class LogCatcher(logging.Handler):
+ """Logging handler for collecting logged messages so you can check them later"""
+ def __init__(self):
+ self.messages = []
+ logging.Handler.__init__(self, logging.WARNING)
+ def emit(self, record):
+ self.messages.append(bb.build.logformatter.format(record))
+ def contains(self, message):
+ return (message in self.messages)