summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/ui/knotty.py134
1 files changed, 96 insertions, 38 deletions
diff --git a/bitbake/lib/bb/ui/knotty.py b/bitbake/lib/bb/ui/knotty.py
index d5dce7172a..386f27876d 100644
--- a/bitbake/lib/bb/ui/knotty.py
+++ b/bitbake/lib/bb/ui/knotty.py
@@ -370,7 +370,11 @@ def _log_settings_from_server(server, observe_only):
370 if error: 370 if error:
371 logger.error("Unable to get the value of BB_CONSOLELOG variable: %s" % error) 371 logger.error("Unable to get the value of BB_CONSOLELOG variable: %s" % error)
372 raise BaseException(error) 372 raise BaseException(error)
373 return includelogs, loglines, consolelogfile 373 logconfigfile, error = server.runCommand([cmd, "BB_LOGCONFIG"])
374 if error:
375 logger.error("Unable to get the value of BB_LOGCONFIG variable: %s" % error)
376 raise BaseException(error)
377 return includelogs, loglines, consolelogfile, logconfigfile
374 378
375_evt_list = [ "bb.runqueue.runQueueExitWait", "bb.event.LogExecTTY", "logging.LogRecord", 379_evt_list = [ "bb.runqueue.runQueueExitWait", "bb.event.LogExecTTY", "logging.LogRecord",
376 "bb.build.TaskFailed", "bb.build.TaskBase", "bb.event.ParseStarted", 380 "bb.build.TaskFailed", "bb.build.TaskBase", "bb.event.ParseStarted",
@@ -387,7 +391,87 @@ def main(server, eventHandler, params, tf = TerminalFilter):
387 if not params.observe_only: 391 if not params.observe_only:
388 params.updateToServer(server, os.environ.copy()) 392 params.updateToServer(server, os.environ.copy())
389 393
390 includelogs, loglines, consolelogfile = _log_settings_from_server(server, params.observe_only) 394 includelogs, loglines, consolelogfile, logconfigfile = _log_settings_from_server(server, params.observe_only)
395
396 loglevel, _ = bb.msg.constructLogOptions()
397
398 if params.options.quiet == 0:
399 console_loglevel = loglevel
400 elif params.options.quiet > 2:
401 console_loglevel = bb.msg.BBLogFormatter.ERROR
402 else:
403 console_loglevel = bb.msg.BBLogFormatter.WARNING
404
405 logconfig = {
406 "version": 1,
407 "handlers": {
408 "BitBake.console": {
409 "class": "logging.StreamHandler",
410 "formatter": "BitBake.consoleFormatter",
411 "level": console_loglevel,
412 "stream": "ext://sys.stdout",
413 "filters": ["BitBake.stdoutFilter"],
414 },
415 "BitBake.errconsole": {
416 "class": "logging.StreamHandler",
417 "formatter": "BitBake.consoleFormatter",
418 "level": loglevel,
419 "stream": "ext://sys.stderr",
420 "filters": ["BitBake.stderrFilter"],
421 },
422 },
423 "formatters": {
424 # This format instance will get color output enabled by the
425 # terminal
426 "BitBake.consoleFormatter" : {
427 "()": "bb.msg.BBLogFormatter",
428 "format": "%(levelname)s: %(message)s"
429 },
430 # The file log requires a separate instance so that it doesn't get
431 # color enabled
432 "BitBake.logfileFormatter": {
433 "()": "bb.msg.BBLogFormatter",
434 "format": "%(levelname)s: %(message)s"
435 }
436 },
437 "filters": {
438 "BitBake.stdoutFilter": {
439 "()": "bb.msg.LogFilterLTLevel",
440 "level": "ERROR"
441 },
442 "BitBake.stderrFilter": {
443 "()": "bb.msg.LogFilterGEQLevel",
444 "level": "ERROR"
445 }
446 },
447 "loggers": {
448 "BitBake": {
449 "level": loglevel,
450 "handlers": ["BitBake.console", "BitBake.errconsole"],
451 }
452 },
453 "disable_existing_loggers": False
454 }
455
456 # Enable the console log file if enabled
457 if consolelogfile and not params.options.show_environment and not params.options.show_versions:
458 logconfig["handlers"]["BitBake.consolelog"] ={
459 "class": "logging.FileHandler",
460 "formatter": "BitBake.logfileFormatter",
461 "level": "INFO",
462 "filename": consolelogfile,
463 }
464 logconfig["loggers"]["BitBake"]["handlers"].append("BitBake.consolelog")
465
466 bb.utils.mkdirhier(os.path.dirname(consolelogfile))
467 loglink = os.path.join(os.path.dirname(consolelogfile), 'console-latest.log')
468 bb.utils.remove(loglink)
469 try:
470 os.symlink(os.path.basename(consolelogfile), loglink)
471 except OSError:
472 pass
473
474 bb.msg.setLoggingConfig(logconfig, logconfigfile)
391 475
392 if sys.stdin.isatty() and sys.stdout.isatty(): 476 if sys.stdin.isatty() and sys.stdout.isatty():
393 log_exec_tty = True 477 log_exec_tty = True
@@ -396,23 +480,16 @@ def main(server, eventHandler, params, tf = TerminalFilter):
396 480
397 helper = uihelper.BBUIHelper() 481 helper = uihelper.BBUIHelper()
398 482
399 console = logging.StreamHandler(sys.stdout) 483 # Look for the specially designated handlers which need to be passed to the
400 errconsole = logging.StreamHandler(sys.stderr) 484 # terminal handler
401 format_str = "%(levelname)s: %(message)s" 485 console = None
402 format = bb.msg.BBLogFormatter(format_str) 486 errconsole = None
403 if params.options.quiet == 0: 487 for h in logger.handlers:
404 forcelevel = None 488 name = getattr(h, '_name', None)
405 elif params.options.quiet > 2: 489 if name == 'BitBake.console':
406 forcelevel = bb.msg.BBLogFormatter.ERROR 490 console = h
407 else: 491 elif name == 'BitBake.errconsole':
408 forcelevel = bb.msg.BBLogFormatter.WARNING 492 errconsole = h
409 bb.msg.addDefaultlogFilter(console, bb.msg.BBLogFilterStdOut, forcelevel)
410 bb.msg.addDefaultlogFilter(errconsole, bb.msg.BBLogFilterStdErr)
411 console.setFormatter(format)
412 errconsole.setFormatter(format)
413 if not bb.msg.has_console_handler(logger):
414 logger.addHandler(console)
415 logger.addHandler(errconsole)
416 493
417 bb.utils.set_process_name("KnottyUI") 494 bb.utils.set_process_name("KnottyUI")
418 495
@@ -420,21 +497,6 @@ def main(server, eventHandler, params, tf = TerminalFilter):
420 server.terminateServer() 497 server.terminateServer()
421 return 498 return
422 499
423 consolelog = None
424 if consolelogfile and not params.options.show_environment and not params.options.show_versions:
425 bb.utils.mkdirhier(os.path.dirname(consolelogfile))
426 conlogformat = bb.msg.BBLogFormatter(format_str)
427 consolelog = logging.FileHandler(consolelogfile)
428 bb.msg.addDefaultlogFilter(consolelog)
429 consolelog.setFormatter(conlogformat)
430 logger.addHandler(consolelog)
431 loglink = os.path.join(os.path.dirname(consolelogfile), 'console-latest.log')
432 bb.utils.remove(loglink)
433 try:
434 os.symlink(os.path.basename(consolelogfile), loglink)
435 except OSError:
436 pass
437
438 llevel, debug_domains = bb.msg.constructLogOptions() 500 llevel, debug_domains = bb.msg.constructLogOptions()
439 server.runCommand(["setEventMask", server.getEventHandle(), llevel, debug_domains, _evt_list]) 501 server.runCommand(["setEventMask", server.getEventHandle(), llevel, debug_domains, _evt_list])
440 502
@@ -761,8 +823,4 @@ def main(server, eventHandler, params, tf = TerminalFilter):
761 if e.errno == errno.EPIPE: 823 if e.errno == errno.EPIPE:
762 pass 824 pass
763 825
764 if consolelog:
765 logger.removeHandler(consolelog)
766 consolelog.close()
767
768 return return_value 826 return return_value