From patchwork Thu May 31 05:13:59 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [bitbake-devel, 4/6] msg.py, knotty.py: Allow dynamic toggle of the debug log level Date: Thu, 31 May 2012 05:13:59 -0000 From: Jason Wessel X-Patchwork-Id: 28993 Message-Id: <1338441241-32230-5-git-send-email-jason.wessel@windriver.com> To: If stdin is a controlling tty, make it possible to have log levels 1-4 where you can press a key to dynamically change the log level, while bitbake is running to see what is going on. 1 = default log level 2 = multiple log tail of bitbake tasks 3 = bit bake debug messages 4 = bitbake debug messages + multiple lot tail of bitbake tasks In order to make this possible a slight modification to the msg logfilter was needed to make it possible to get an object so as to change the filter log level. Signed-off-by: Jason Wessel --- lib/bb/msg.py | 9 ++++++++- lib/bb/ui/knotty.py | 21 ++++++++++++++++++--- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/lib/bb/msg.py b/lib/bb/msg.py index 9b39325..4b2f90e 100644 --- a/lib/bb/msg.py +++ b/lib/bb/msg.py @@ -86,6 +86,13 @@ class BBLogFilter(object): handler.setLevel(loglevel) handler.addFilter(self) + def setFiltLevel(self, handler, level): + self.stdlevel = level + handler.setLevel(level) + + def getFiltLevel(self): + return self.stdlevel + def filter(self, record): if record.levelno >= self.stdlevel: return True @@ -131,7 +138,7 @@ def addDefaultlogFilter(handler): dlevel = len(tuple(iterator)) debug_domains["BitBake.%s" % domainarg] = logging.DEBUG - dlevel + 1 - BBLogFilter(handler, level, debug_domains) + return BBLogFilter(handler, level, debug_domains) # # Message handling functions diff --git a/lib/bb/ui/knotty.py b/lib/bb/ui/knotty.py index f72f0ad..7a7a1b2 100644 --- a/lib/bb/ui/knotty.py +++ b/lib/bb/ui/knotty.py @@ -135,8 +135,11 @@ class StdinMgr: termios.tcsetattr(self.fd, termios.TCSANOW, new) class RtLogLevel: - def __init__(self, mlt): + def __init__(self, handler, logfilter, mlt): self.displaytail = False + self.handler = handler + self.logfilter = logfilter + self.defaultLevel = logfilter.getFiltLevel() self.mlt = mlt def displayLogs(self): @@ -147,10 +150,22 @@ class RtLogLevel: if input == "1": if verbose: print "NOTE: Turning off real time log tail" + self.logfilter.setFiltLevel(self.handler, self.defaultLevel) self.displaytail = False elif input == "2": if verbose: print "NOTE: Turning on real time log tail" + self.logfilter.setFiltLevel(self.handler, self.defaultLevel) + self.displaytail = True + elif input == "3": + if verbose: + print "NOTE: Turning on DEBUG logging" + self.logfilter.setFiltLevel(self.handler, logging.DEBUG) + self.displaytail = False + elif input == "4": + if verbose: + print "NOTE: Turning on DEBUG logging + real time log tail" + self.logfilter.setFiltLevel(self.handler, logging.DEBUG) self.displaytail = True def main(server, eventHandler, tf = TerminalFilter): @@ -171,8 +186,8 @@ def main(server, eventHandler, tf = TerminalFilter): console = logging.StreamHandler(sys.stdout) format = bb.msg.BBLogFormatter("%(levelname)s: %(message)s") - bb.msg.addDefaultlogFilter(console) - rtloglevel = RtLogLevel(mlt) + logfilter = bb.msg.addDefaultlogFilter(console) + rtloglevel = RtLogLevel(console, logfilter, mlt) bb_rt_loglevel = server.runCommand(["getVariable", "BB_RT_LOGLEVEL"]) if bb_rt_loglevel and bb_rt_loglevel != "": rtloglevel.setLevel(bb_rt_loglevel, False)